X-Git-Url: https://gerrit.o-ran-sc.org/r/gitweb?p=o-du%2Fphy.git;a=blobdiff_plain;f=fhi_lib%2Fapp%2Fsrc%2Fconfig.c;fp=fhi_lib%2Fapp%2Fsrc%2Fconfig.c;h=1564c8d28f7215f56c071d827844323355c34524;hp=0000000000000000000000000000000000000000;hb=4745e5c88ba931c6d71cb6d8c681f76cf364eac5;hpb=59f84608ec15c016958a6e0e0ddd813f376c0925 diff --git a/fhi_lib/app/src/config.c b/fhi_lib/app/src/config.c new file mode 100644 index 0000000..1564c8d --- /dev/null +++ b/fhi_lib/app/src/config.c @@ -0,0 +1,373 @@ +/****************************************************************************** +* +* Copyright (c) 2019 Intel. +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*******************************************************************************/ + + +/** + * @brief + * @file + * @ingroup + * @author Intel Corporation + **/ + +#include "rte_common.h" +#include "config.h" + +#include + +#define MAX_LINE_SIZE 512 +/* Configuration file maximum supported line length */ + + +#define KEY_APP_MODE "appMode" +#define KEY_XRAN_MODE "xranMode" +#define KEY_MU_NUMBER "mu" +#define KEY_CC_PER_PORT_NUM "ccNum" +#define KEY_ANT_NUM "antNum" +#define KEY_TTI_PERIOD "ttiPeriod" +#define KEY_LLS_CU_MAC "llsCUMac" +#define KEY_RU_MAC "ruMac" + +#define KEY_FILE_AxC0 "antC0" +#define KEY_FILE_AxC1 "antC1" +#define KEY_FILE_AxC2 "antC2" +#define KEY_FILE_AxC3 "antC3" +#define KEY_FILE_AxC4 "antC4" +#define KEY_FILE_AxC5 "antC5" +#define KEY_FILE_AxC6 "antC6" +#define KEY_FILE_AxC7 "antC7" +#define KEY_FILE_AxC8 "antC8" +#define KEY_FILE_AxC9 "antC9" +#define KEY_FILE_AxC10 "antC10" +#define KEY_FILE_AxC11 "antC11" +#define KEY_FILE_AxC12 "antC12" +#define KEY_FILE_AxC13 "antC13" +#define KEY_FILE_AxC14 "antC14" +#define KEY_FILE_AxC15 "antC15" + +#define KEY_PRACH_ENABLE "rachEanble" +#define KEY_PRACH_OFFSET "rachOffset" +#define KEY_PRACH_CFG_IDX "rachCfgIdx" + +#define KEY_IQ_SWAP "iqswap" +#define KEY_HTONS_SWAP "nebyteorderswap" + +#define KEY_TADV_CP_DL "Tadv_cp_dl" +#define KEY_T2A_MIN_CP_DL "T2a_min_cp_dl" +#define KEY_T2A_MAX_CP_DL "T2a_max_cp_dl" +#define KEY_T2A_MIN_CP_UL "T2a_min_cp_ul" +#define KEY_T2A_MAX_CP_UL "T2a_max_cp_ul" +#define KEY_T2A_MIN_UP "T2a_min_up" +#define KEY_T2A_MAX_UP "T2a_max_up" +#define KEY_TA3_MIN "Ta3_min" +#define KEY_TA3_MAX "Ta3_max" +#define KEY_T1A_MIN_CP_DL "T1a_min_cp_dl" +#define KEY_T1A_MAX_CP_DL "T1a_max_cp_dl" +#define KEY_T1A_MIN_CP_UL "T1a_min_cp_ul" +#define KEY_T1A_MAX_CP_UL "T1a_max_cp_ul" +#define KEY_T1A_MIN_UP "T1a_min_up" +#define KEY_T1A_MAX_UP "T1a_max_up" +#define KEY_TA4_MIN "Ta4_min" +#define KEY_TA4_MAX "Ta4_max" + + +#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" + + +/** + * Set runtime configuration parameters to their defaults. + * + * @todo Initialize missing parameters. + */ +static void init_config(RuntimeConfig* config) +{ + memset(config , 0, sizeof(RuntimeConfig)); +} + +/** - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - **/ + +static void trim(char* input) +{ + uint32_t i; + for (i = 0; iappMode = atoi(value); + } else if (strcmp(key, KEY_XRAN_MODE) == 0) { + config->xranMode = atoi(value); + } 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); + } else if (strcmp(key, KEY_ANT_NUM) == 0) { + config->numAxc = atoi(value); + } else if (strcmp(key, KEY_TTI_PERIOD) == 0) { + config->ttiPeriod = atoi(value); + } else if (strcmp(key, KEY_IQ_SWAP) == 0) { + config->iqswap = atoi(value); + } else if (strcmp(key, KEY_HTONS_SWAP) == 0) { + config->nebyteorderswap = atoi(value); + } else if (strcmp(key, KEY_LLS_CU_MAC) == 0) { + sscanf(value, "%02x:%02x:%02x:%02x:%02x:%02x", (uint32_t*)&config->lls_cu_addr.addr_bytes[0], + (uint32_t*)&config->lls_cu_addr.addr_bytes[1], + (uint32_t*)&config->lls_cu_addr.addr_bytes[2], + (uint32_t*)&config->lls_cu_addr.addr_bytes[3], + (uint32_t*)&config->lls_cu_addr.addr_bytes[4], + (uint32_t*)&config->lls_cu_addr.addr_bytes[5]); + + printf("lls-CU MAC address: %02X:%02X:%02X:%02X:%02X:%02X\n", + config->lls_cu_addr.addr_bytes[0], + config->lls_cu_addr.addr_bytes[1], + config->lls_cu_addr.addr_bytes[2], + config->lls_cu_addr.addr_bytes[3], + config->lls_cu_addr.addr_bytes[4], + config->lls_cu_addr.addr_bytes[5]); + + } else if (strcmp(key, KEY_RU_MAC) == 0) { + sscanf(value, "%02x:%02x:%02x:%02x:%02x:%02x", (uint32_t*)&config->ru_addr.addr_bytes[0], + (uint32_t*)&config->ru_addr.addr_bytes[1], + (uint32_t*)&config->ru_addr.addr_bytes[2], + (uint32_t*)&config->ru_addr.addr_bytes[3], + (uint32_t*)&config->ru_addr.addr_bytes[4], + (uint32_t*)&config->ru_addr.addr_bytes[5]); + + printf("RU MAC address: %02X:%02X:%02X:%02X:%02X:%02X\n", + config->ru_addr.addr_bytes[0], + config->ru_addr.addr_bytes[1], + config->ru_addr.addr_bytes[2], + config->ru_addr.addr_bytes[3], + config->ru_addr.addr_bytes[4], + config->ru_addr.addr_bytes[5]); + } else if (strcmp(key, KEY_FILE_AxC0) == 0) { + strncpy(&config->ant_file[0][0], value, strlen(value)); + printf("ant0: %s\n",config->ant_file[0]); + } else if (strcmp(key, KEY_FILE_AxC1) == 0) { + strncpy(&config->ant_file[1][0], value, strlen(value)); + printf("ant1: %s\n",config->ant_file[1]); + } else if (strcmp(key, KEY_FILE_AxC2) == 0) { + strncpy(&config->ant_file[2][0], value, strlen(value)); + printf("ant2: %s\n",config->ant_file[2]); + } else if (strcmp(key, KEY_FILE_AxC3) == 0) { + strncpy(&config->ant_file[3][0], value, strlen(value)); + printf("ant3: %s\n",config->ant_file[3]); + } else if (strcmp(key, KEY_FILE_AxC4) == 0) { + strncpy(&config->ant_file[4][0], value, strlen(value)); + printf("ant4: %s\n",config->ant_file[4]); + } else if (strcmp(key, KEY_FILE_AxC5) == 0) { + strncpy(&config->ant_file[5][0], value, strlen(value)); + printf("ant5: %s\n",config->ant_file[5]); + } else if (strcmp(key, KEY_FILE_AxC6) == 0) { + strncpy(&config->ant_file[6][0], value, strlen(value)); + printf("ant6: %s\n",config->ant_file[6]); + } else if (strcmp(key, KEY_FILE_AxC7) == 0) { + strncpy(&config->ant_file[7][0], value, strlen(value)); + printf("ant7: %s\n",config->ant_file[7]); + } else if (strcmp(key, KEY_FILE_AxC8) == 0) { + strncpy(&config->ant_file[8][0], value, strlen(value)); + printf("ant8: %s\n",config->ant_file[8]); + } else if (strcmp(key, KEY_FILE_AxC9) == 0) { + strncpy(&config->ant_file[9][0], value, strlen(value)); + printf("ant9: %s\n",config->ant_file[9]); + } else if (strcmp(key, KEY_FILE_AxC10) == 0) { + strncpy(&config->ant_file[10][0], value, strlen(value)); + printf("ant10: %s\n",config->ant_file[10]); + } else if (strcmp(key, KEY_FILE_AxC11) == 0) { + strncpy(&config->ant_file[11][0], value, strlen(value)); + printf("ant11: %s\n",config->ant_file[11]); + } else if (strcmp(key, KEY_FILE_AxC12) == 0) { + strncpy(&config->ant_file[12][0], value, strlen(value)); + printf("ant12: %s\n",config->ant_file[12]); + } else if (strcmp(key, KEY_FILE_AxC13) == 0) { + strncpy(&config->ant_file[13][0], value, strlen(value)); + printf("ant13: %s\n",config->ant_file[13]); + } else if (strcmp(key, KEY_FILE_AxC14) == 0) { + strncpy(&config->ant_file[14][0], value, strlen(value)); + printf("ant14: %s\n",config->ant_file[14]); + } else if (strcmp(key, KEY_FILE_AxC15) == 0) { + strncpy(&config->ant_file[15][0], value, strlen(value)); + printf("ant15: %s\n",config->ant_file[15]); + } else if (strcmp(key, KEY_PRACH_ENABLE) == 0) { + config->enablePrach = atoi(value); + printf("Prach enable: %d\n",config->enablePrach); + } else if (strcmp(key, KEY_PRACH_OFFSET ) == 0) { + config->prachOffset = atoi(value); + printf("Prach Offset: %d\n",config->prachOffset); + } else if (strcmp(key, KEY_PRACH_CFG_IDX ) == 0) { + config->prachConfigIndex = atoi(value); + printf("Prach Conf Index: %d\n",config->prachConfigIndex); + + /* 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); + } 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); + } 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); + } 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); + } 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); + } 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); + } 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); + } else if (strcmp(key, KEY_TA3_MIN ) == 0) { + config->Ta3_min = atoi(value); + printf("Ta3_min: %d\n",config->Ta3_min); + } else if (strcmp(key, KEY_TA3_MAX ) == 0) { + config->Ta3_max = atoi(value); + printf("Ta3_max: %d\n",config->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); + } 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); + } 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); + } 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); + } 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); + } 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); + } else if (strcmp(key, KEY_TA4_MIN ) == 0) { + config->Ta4_min = atoi(value); + printf("Ta4_min: %d\n",config->Ta4_min); + } else if (strcmp(key, KEY_TA4_MAX ) == 0) { + config->Ta4_max = atoi(value); + printf("Ta4_max: %d\n",config->Ta4_max); + /* end of timing */ + } else if (strcmp(key, KEY_CP_ENABLE ) == 0) { + config->enableCP = atoi(value); + printf("CPenable: %d\n",config->enableCP); + } else if (strcmp(key, KEY_DEBUG_STOP ) == 0) { + config->debugStop = atoi(value); + printf("debugStop: %d\n",config->debugStop); + } 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 { + printf("Unsupported configuration key [%s]\n", key); + return -1; + } + + return 0; +} + +int parseConfigFile(char *filename, RuntimeConfig *config) +{ + char inputLine[MAX_LINE_SIZE] = {0}; + int inputLen = 0; + int i; + int lineNum = 0; + char key[MAX_LINE_SIZE] = {0}; + char value[MAX_LINE_SIZE] = {0}; + FILE *file = fopen(filename, "r"); + + if (NULL == file) { + //log_err("Error while opening config file from: %s", filename); + return -1; + } + + init_config(config); + + for (;;) { + if (fgets(inputLine, MAX_LINE_SIZE, file) == NULL) { + if (lineNum > 0) { + printf("%d lines of config file has been read.\n", lineNum); + break; + } else { + printf("Configuration file reading error has occurred.\n"); + fclose(file); + return -1; + } + } + + if (inputLine[strlen(inputLine)-1] == '\n') + inputLine[strlen(inputLine)-1] == '\0'; + + lineNum++; + inputLen = strlen(inputLine); + + for (i=0; i inputLen - 1) || (i - 2 > inputLen)) { + //log_err("Parsing config file error at line %d", lineNum); + fclose(file); + return -1; + } + strncpy(value, &inputLine[i+1], (sizeof(value) - 1)); + value[inputLen-i-2] = '\0'; + trim(value); + + if (strlen(key) == 0 || strlen(value) == 0) { + printf("Parsing config file error at line %d", lineNum); + fclose(file); + return -1; + } + + if (fillConfigStruct(config, key, value) != 0) { + fclose(file); + return -1; + } + + break; + } + + memset(&inputLine[0], 0, sizeof(MAX_LINE_SIZE)); + memset(&key[0], 0, sizeof(MAX_LINE_SIZE)); + memset(&value[0], 0, sizeof(MAX_LINE_SIZE)); + } + fclose(file); + + return 0; +}