Commit 12b87108 authored by gauthier's avatar gauthier

Removed dedicated scenario option, fixed scenario name(xml attribute) = pdml filename

parent e8c40e78
...@@ -93,12 +93,10 @@ ...@@ -93,12 +93,10 @@
#define ENB_CONFIG_STRING_ENB_IPV4_ADDR_FOR_S1U "ENB_IPV4_ADDRESS_FOR_S1U" #define ENB_CONFIG_STRING_ENB_IPV4_ADDR_FOR_S1U "ENB_IPV4_ADDRESS_FOR_S1U"
#define ENB_CONFIG_STRING_ENB_PORT_FOR_S1U "ENB_PORT_FOR_S1U" #define ENB_CONFIG_STRING_ENB_PORT_FOR_S1U "ENB_PORT_FOR_S1U"
#define ENB_CONFIG_PROPERTIES_INDEX_OLD 0
#define ENB_CONFIG_PROPERTIES_INDEX_NEW 1
#define ENB_CONFIG_MAX_XSLT_PARAMS 32 #define ENB_CONFIG_MAX_XSLT_PARAMS 32
Enb_properties_array_t g_enb_properties[2]; Enb_properties_array_t g_enb_properties;
char *g_openair_dir = NULL; char *g_openair_dir = NULL;
char *g_test_dir = NULL; char *g_test_dir = NULL;
char *g_pdml_in_origin = NULL; char *g_pdml_in_origin = NULL;
...@@ -107,7 +105,6 @@ extern int xmlLoadExtDtdDefaultValue; ...@@ -107,7 +105,6 @@ extern int xmlLoadExtDtdDefaultValue;
#define GENERATE_PDML_FILE 1 #define GENERATE_PDML_FILE 1
#define GENERATE_GENERIC_SCENARIO 2 #define GENERATE_GENERIC_SCENARIO 2
#define GENERATE_DEDICATED_SCENARIO 4
#define GS_IS_FILE 1 #define GS_IS_FILE 1
#define GS_IS_DIR 2 #define GS_IS_DIR 2
...@@ -187,6 +184,7 @@ int generate_generic_scenario(const char const * test_nameP, const char const * ...@@ -187,6 +184,7 @@ int generate_generic_scenario(const char const * test_nameP, const char const *
int nb_params = 0; int nb_params = 0;
int i,j; int i,j;
char astring[1024]; char astring[1024];
char *astring2 = NULL;
struct in_addr addr; struct in_addr addr;
memset(generic_scenario_filename, 0, sizeof(generic_scenario_filename)); memset(generic_scenario_filename, 0, sizeof(generic_scenario_filename));
...@@ -218,24 +216,32 @@ int generate_generic_scenario(const char const * test_nameP, const char const * ...@@ -218,24 +216,32 @@ int generate_generic_scenario(const char const * test_nameP, const char const *
fprintf(stdout, "pdml file: %s\n", pdml_in_basenameP); fprintf(stdout, "pdml file: %s\n", pdml_in_basenameP);
} }
params[nb_params++] = "test_name"; params[nb_params++] = "test_name";
sprintf(astring, "\"%s\"", test_nameP); sprintf(astring, "%s", pdml_in_basenameP);
if (strip_extension(astring) > 0) {
astring2 = strdup(astring);
sprintf(astring, "\"%s\"", astring2);
free(astring2);
astring2 = NULL;
} else {
fprintf(stderr, "Assigning test name failed: %s\n", astring);
}
params[nb_params++] = strdup(astring); params[nb_params++] = strdup(astring);
for (i = 0; i < g_enb_properties[ENB_CONFIG_PROPERTIES_INDEX_OLD].number; i++) { for (i = 0; i < g_enb_properties.number; i++) {
// eNB S1-C IPv4 address // eNB S1-C IPv4 address
sprintf(astring, "enb_s1c%d", i); sprintf(astring, "enb_s1c%d", i);
params[nb_params++] = strdup(astring); params[nb_params++] = strdup(astring);
addr.s_addr = g_enb_properties[ENB_CONFIG_PROPERTIES_INDEX_OLD].properties[i]->enb_ipv4_address_for_S1_MME; addr.s_addr = g_enb_properties.properties[i]->enb_ipv4_address_for_S1_MME;
sprintf(astring, "\"%s\"", inet_ntoa(addr)); sprintf(astring, "\"%s\"", inet_ntoa(addr));
params[nb_params++] = strdup(astring); params[nb_params++] = strdup(astring);
// MME S1-C IPv4 address // MME S1-C IPv4 address
for (j = 0; j < g_enb_properties[ENB_CONFIG_PROPERTIES_INDEX_OLD].properties[i]->nb_mme; j++) { for (j = 0; j < g_enb_properties.properties[i]->nb_mme; j++) {
sprintf(astring, "mme_s1c%d_%d", i, j); sprintf(astring, "mme_s1c%d_%d", i, j);
params[nb_params++] = strdup(astring); params[nb_params++] = strdup(astring);
AssertFatal (g_enb_properties[ENB_CONFIG_PROPERTIES_INDEX_OLD].properties[i]->mme_ip_address[j].ipv4_address, AssertFatal (g_enb_properties.properties[i]->mme_ip_address[j].ipv4_address,
"Only support MME IPv4 address\n"); "Only support MME IPv4 address\n");
sprintf(astring, "\"%s\"", g_enb_properties[ENB_CONFIG_PROPERTIES_INDEX_OLD].properties[i]->mme_ip_address[j].ipv4_address); sprintf(astring, "\"%s\"", g_enb_properties.properties[i]->mme_ip_address[j].ipv4_address);
params[nb_params++] = strdup(astring); params[nb_params++] = strdup(astring);
} }
} }
...@@ -269,26 +275,26 @@ int generate_generic_scenario(const char const * test_nameP, const char const * ...@@ -269,26 +275,26 @@ int generate_generic_scenario(const char const * test_nameP, const char const *
} }
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------
static void enb_config_display(const boolean_t new_config_fileP) static void enb_config_display(void)
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------
{ {
int i; int i;
printf( "\n----------------------------------------------------------------------\n"); printf( "\n----------------------------------------------------------------------\n");
printf( " %s ENB CONFIG FILE CONTENT LOADED:\n", new_config_fileP == ENB_CONFIG_PROPERTIES_INDEX_OLD ? "Old":"New"); printf( " ENB CONFIG FILE CONTENT LOADED:\n");
printf( "----------------------------------------------------------------------\n"); printf( "----------------------------------------------------------------------\n");
for (i = 0; i < g_enb_properties[new_config_fileP].number; i++) { for (i = 0; i < g_enb_properties.number; i++) {
printf( "ENB CONFIG for instance %u:\n\n", i); printf( "ENB CONFIG for instance %u:\n\n", i);
printf( "\teNB name: \t%s\n",g_enb_properties[new_config_fileP].properties[i]->eNB_name); printf( "\teNB name: \t%s\n",g_enb_properties.properties[i]->eNB_name);
printf( "\teNB ID: \t%"PRIu32"\n",g_enb_properties[new_config_fileP].properties[i]->eNB_id); printf( "\teNB ID: \t%"PRIu32"\n",g_enb_properties.properties[i]->eNB_id);
printf( "\tCell type: \t%s\n",g_enb_properties[new_config_fileP].properties[i]->cell_type == CELL_MACRO_ENB ? "CELL_MACRO_ENB":"CELL_HOME_ENB"); printf( "\tCell type: \t%s\n",g_enb_properties.properties[i]->cell_type == CELL_MACRO_ENB ? "CELL_MACRO_ENB":"CELL_HOME_ENB");
printf( "\tTAC: \t%"PRIu16"\n",g_enb_properties[new_config_fileP].properties[i]->tac); printf( "\tTAC: \t%"PRIu16"\n",g_enb_properties.properties[i]->tac);
printf( "\tMCC: \t%"PRIu16"\n",g_enb_properties[new_config_fileP].properties[i]->mcc); printf( "\tMCC: \t%"PRIu16"\n",g_enb_properties.properties[i]->mcc);
if (g_enb_properties[new_config_fileP].properties[i]->mnc_digit_length == 3) { if (g_enb_properties.properties[i]->mnc_digit_length == 3) {
printf( "\tMNC: \t%03"PRIu16"\n",g_enb_properties[new_config_fileP].properties[i]->mnc); printf( "\tMNC: \t%03"PRIu16"\n",g_enb_properties.properties[i]->mnc);
} else { } else {
printf( "\tMNC: \t%02"PRIu16"\n",g_enb_properties[new_config_fileP].properties[i]->mnc); printf( "\tMNC: \t%02"PRIu16"\n",g_enb_properties.properties[i]->mnc);
} }
printf( "\n--------------------------------------------------------\n"); printf( "\n--------------------------------------------------------\n");
} }
...@@ -301,7 +307,7 @@ static void enb_config_display(const boolean_t new_config_fileP) ...@@ -301,7 +307,7 @@ static void enb_config_display(const boolean_t new_config_fileP)
#define libconfig_int int #define libconfig_int int
#endif #endif
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------
void enb_config_init(const char const * lib_config_file_name_pP, const boolean_t new_config_fileP) void enb_config_init(const char const * lib_config_file_name_pP)
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------
{ {
config_t cfg; config_t cfg;
...@@ -336,9 +342,7 @@ void enb_config_init(const char const * lib_config_file_name_pP, const boolean_ ...@@ -336,9 +342,7 @@ void enb_config_init(const char const * lib_config_file_name_pP, const boolean_
char *address = NULL; char *address = NULL;
char *cidr = NULL; char *cidr = NULL;
AssertFatal ((new_config_fileP == 0) || (new_config_fileP == 1),
"Bad parameter new_config_fileP %d \n",
new_config_fileP);
AssertFatal (lib_config_file_name_pP != NULL, AssertFatal (lib_config_file_name_pP != NULL,
"Bad parameter lib_config_file_name_pP %s , must reference a valid eNB config file\n", "Bad parameter lib_config_file_name_pP %s , must reference a valid eNB config file\n",
lib_config_file_name_pP); lib_config_file_name_pP);
...@@ -374,7 +378,7 @@ void enb_config_init(const char const * lib_config_file_name_pP, const boolean_ ...@@ -374,7 +378,7 @@ void enb_config_init(const char const * lib_config_file_name_pP, const boolean_
setting = config_lookup(&cfg, ENB_CONFIG_STRING_ENB_LIST); setting = config_lookup(&cfg, ENB_CONFIG_STRING_ENB_LIST);
if (setting != NULL) { if (setting != NULL) {
enb_properties_index = g_enb_properties[new_config_fileP].number; enb_properties_index = g_enb_properties.number;
parse_errors = 0; parse_errors = 0;
num_enbs = config_setting_length(setting); num_enbs = config_setting_length(setting);
...@@ -411,34 +415,34 @@ void enb_config_init(const char const * lib_config_file_name_pP, const boolean_ ...@@ -411,34 +415,34 @@ void enb_config_init(const char const * lib_config_file_name_pP, const boolean_
// search if in active list // search if in active list
for (j=0; j < num_enb_properties; j++) { for (j=0; j < num_enb_properties; j++) {
if (strcmp(active_enb[j], enb_name) == 0) { if (strcmp(active_enb[j], enb_name) == 0) {
g_enb_properties[new_config_fileP].properties[enb_properties_index] = calloc(1, sizeof(Enb_properties_t)); g_enb_properties.properties[enb_properties_index] = calloc(1, sizeof(Enb_properties_t));
g_enb_properties[new_config_fileP].properties[enb_properties_index]->eNB_id = enb_id; g_enb_properties.properties[enb_properties_index]->eNB_id = enb_id;
if (strcmp(cell_type, "CELL_MACRO_ENB") == 0) { if (strcmp(cell_type, "CELL_MACRO_ENB") == 0) {
g_enb_properties[new_config_fileP].properties[enb_properties_index]->cell_type = CELL_MACRO_ENB; g_enb_properties.properties[enb_properties_index]->cell_type = CELL_MACRO_ENB;
} else if (strcmp(cell_type, "CELL_HOME_ENB") == 0) { } else if (strcmp(cell_type, "CELL_HOME_ENB") == 0) {
g_enb_properties[new_config_fileP].properties[enb_properties_index]->cell_type = CELL_HOME_ENB; g_enb_properties.properties[enb_properties_index]->cell_type = CELL_HOME_ENB;
} else { } else {
AssertError (0, parse_errors ++, AssertError (0, parse_errors ++,
"Failed to parse eNB configuration file %s, enb %d unknown value \"%s\" for cell_type choice: CELL_MACRO_ENB or CELL_HOME_ENB !\n", "Failed to parse eNB configuration file %s, enb %d unknown value \"%s\" for cell_type choice: CELL_MACRO_ENB or CELL_HOME_ENB !\n",
lib_config_file_name_pP, i, cell_type); lib_config_file_name_pP, i, cell_type);
} }
g_enb_properties[new_config_fileP].properties[enb_properties_index]->eNB_name = strdup(enb_name); g_enb_properties.properties[enb_properties_index]->eNB_name = strdup(enb_name);
g_enb_properties[new_config_fileP].properties[enb_properties_index]->tac = (uint16_t)atoi(tac); g_enb_properties.properties[enb_properties_index]->tac = (uint16_t)atoi(tac);
g_enb_properties[new_config_fileP].properties[enb_properties_index]->mcc = (uint16_t)atoi(mcc); g_enb_properties.properties[enb_properties_index]->mcc = (uint16_t)atoi(mcc);
g_enb_properties[new_config_fileP].properties[enb_properties_index]->mnc = (uint16_t)atoi(mnc); g_enb_properties.properties[enb_properties_index]->mnc = (uint16_t)atoi(mnc);
g_enb_properties[new_config_fileP].properties[enb_properties_index]->mnc_digit_length = strlen(mnc); g_enb_properties.properties[enb_properties_index]->mnc_digit_length = strlen(mnc);
AssertFatal((g_enb_properties[new_config_fileP].properties[enb_properties_index]->mnc_digit_length == 2) || AssertFatal((g_enb_properties.properties[enb_properties_index]->mnc_digit_length == 2) ||
(g_enb_properties[new_config_fileP].properties[enb_properties_index]->mnc_digit_length == 3), (g_enb_properties.properties[enb_properties_index]->mnc_digit_length == 3),
"BAD MNC DIGIT LENGTH %d", "BAD MNC DIGIT LENGTH %d",
g_enb_properties[new_config_fileP].properties[i]->mnc_digit_length); g_enb_properties.properties[i]->mnc_digit_length);
setting_mme_addresses = config_setting_get_member (setting_enb, ENB_CONFIG_STRING_MME_IP_ADDRESS); setting_mme_addresses = config_setting_get_member (setting_enb, ENB_CONFIG_STRING_MME_IP_ADDRESS);
num_mme_address = config_setting_length(setting_mme_addresses); num_mme_address = config_setting_length(setting_mme_addresses);
g_enb_properties[new_config_fileP].properties[enb_properties_index]->nb_mme = 0; g_enb_properties.properties[enb_properties_index]->nb_mme = 0;
for (j = 0; j < num_mme_address; j++) { for (j = 0; j < num_mme_address; j++) {
setting_mme_address = config_setting_get_elem(setting_mme_addresses, j); setting_mme_address = config_setting_get_elem(setting_mme_addresses, j);
...@@ -456,22 +460,22 @@ void enb_config_init(const char const * lib_config_file_name_pP, const boolean_ ...@@ -456,22 +460,22 @@ void enb_config_init(const char const * lib_config_file_name_pP, const boolean_
continue; // FIXME will prevent segfaults below, not sure what happens at function exit... continue; // FIXME will prevent segfaults below, not sure what happens at function exit...
} }
g_enb_properties[new_config_fileP].properties[enb_properties_index]->nb_mme += 1; g_enb_properties.properties[enb_properties_index]->nb_mme += 1;
g_enb_properties[new_config_fileP].properties[enb_properties_index]->mme_ip_address[j].ipv4_address = strdup(ipv4); g_enb_properties.properties[enb_properties_index]->mme_ip_address[j].ipv4_address = strdup(ipv4);
g_enb_properties[new_config_fileP].properties[enb_properties_index]->mme_ip_address[j].ipv6_address = strdup(ipv6); g_enb_properties.properties[enb_properties_index]->mme_ip_address[j].ipv6_address = strdup(ipv6);
if (strcmp(active, "yes") == 0) { if (strcmp(active, "yes") == 0) {
g_enb_properties[new_config_fileP].properties[enb_properties_index]->mme_ip_address[j].active = 1; g_enb_properties.properties[enb_properties_index]->mme_ip_address[j].active = 1;
} // else { (calloc) } // else { (calloc)
if (strcmp(preference, "ipv4") == 0) { if (strcmp(preference, "ipv4") == 0) {
g_enb_properties[new_config_fileP].properties[enb_properties_index]->mme_ip_address[j].ipv4 = 1; g_enb_properties.properties[enb_properties_index]->mme_ip_address[j].ipv4 = 1;
} else if (strcmp(preference, "ipv6") == 0) { } else if (strcmp(preference, "ipv6") == 0) {
g_enb_properties[new_config_fileP].properties[enb_properties_index]->mme_ip_address[j].ipv6 = 1; g_enb_properties.properties[enb_properties_index]->mme_ip_address[j].ipv6 = 1;
} else if (strcmp(preference, "no") == 0) { } else if (strcmp(preference, "no") == 0) {
g_enb_properties[new_config_fileP].properties[enb_properties_index]->mme_ip_address[j].ipv4 = 1; g_enb_properties.properties[enb_properties_index]->mme_ip_address[j].ipv4 = 1;
g_enb_properties[new_config_fileP].properties[enb_properties_index]->mme_ip_address[j].ipv6 = 1; g_enb_properties.properties[enb_properties_index]->mme_ip_address[j].ipv6 = 1;
} }
} }
...@@ -493,22 +497,22 @@ void enb_config_init(const char const * lib_config_file_name_pP, const boolean_ ...@@ -493,22 +497,22 @@ void enb_config_init(const char const * lib_config_file_name_pP, const boolean_
&enb_port_for_S1U) &enb_port_for_S1U)
) )
) { ) {
g_enb_properties[new_config_fileP].properties[enb_properties_index]->enb_interface_name_for_S1U = strdup(enb_interface_name_for_S1U); g_enb_properties.properties[enb_properties_index]->enb_interface_name_for_S1U = strdup(enb_interface_name_for_S1U);
cidr = enb_ipv4_address_for_S1U; cidr = enb_ipv4_address_for_S1U;
address = strtok(cidr, "/"); address = strtok(cidr, "/");
if (address) { if (address) {
IPV4_STR_ADDR_TO_INT_NWBO ( address, g_enb_properties[new_config_fileP].properties[enb_properties_index]->enb_ipv4_address_for_S1U, "BAD IP ADDRESS FORMAT FOR eNB S1_U !\n" ); IPV4_STR_ADDR_TO_INT_NWBO ( address, g_enb_properties.properties[enb_properties_index]->enb_ipv4_address_for_S1U, "BAD IP ADDRESS FORMAT FOR eNB S1_U !\n" );
} }
g_enb_properties[new_config_fileP].properties[enb_properties_index]->enb_port_for_S1U = enb_port_for_S1U; g_enb_properties.properties[enb_properties_index]->enb_port_for_S1U = enb_port_for_S1U;
g_enb_properties[new_config_fileP].properties[enb_properties_index]->enb_interface_name_for_S1_MME = strdup(enb_interface_name_for_S1_MME); g_enb_properties.properties[enb_properties_index]->enb_interface_name_for_S1_MME = strdup(enb_interface_name_for_S1_MME);
cidr = enb_ipv4_address_for_S1_MME; cidr = enb_ipv4_address_for_S1_MME;
address = strtok(cidr, "/"); address = strtok(cidr, "/");
if (address) { if (address) {
IPV4_STR_ADDR_TO_INT_NWBO ( address, g_enb_properties[new_config_fileP].properties[enb_properties_index]->enb_ipv4_address_for_S1_MME, "BAD IP ADDRESS FORMAT FOR eNB S1_MME !\n" ); IPV4_STR_ADDR_TO_INT_NWBO ( address, g_enb_properties.properties[enb_properties_index]->enb_ipv4_address_for_S1_MME, "BAD IP ADDRESS FORMAT FOR eNB S1_MME !\n" );
} }
} }
} // if (subsetting != NULL) { } // if (subsetting != NULL) {
...@@ -518,7 +522,7 @@ void enb_config_init(const char const * lib_config_file_name_pP, const boolean_ ...@@ -518,7 +522,7 @@ void enb_config_init(const char const * lib_config_file_name_pP, const boolean_
} // for (i = 0; i < num_enbs; i++) } // for (i = 0; i < num_enbs; i++)
} // if (setting != NULL) { } // if (setting != NULL) {
g_enb_properties[new_config_fileP].number += num_enb_properties; g_enb_properties.number += num_enb_properties;
AssertFatal (parse_errors == 0, AssertFatal (parse_errors == 0,
...@@ -540,22 +544,19 @@ static void usage ( ...@@ -540,22 +544,19 @@ static void usage (
fprintf (stdout, "\n"); fprintf (stdout, "\n");
fprintf (stdout, "Available options:\n"); fprintf (stdout, "Available options:\n");
fprintf (stdout, "\t-h | --help Print this help and return\n"); fprintf (stdout, "\t-h | --help Print this help and return\n");
fprintf (stdout, "\t-n | --new-enb-conf-file <file> Provide an updated eNB config file for generating a copy of the original test\n");
fprintf (stdout, " This option is set as many times as there are some eNB config files in the original test\n");
fprintf (stdout, "\t-o | --old-enb-conf-file <file> Provide the old eNB config file for generating a copy of the original test\n"); fprintf (stdout, "\t-o | --old-enb-conf-file <file> Provide the old eNB config file for generating a copy of the original test\n");
fprintf (stdout, " This option is set as many times as there are some eNB config files in the original test\n"); fprintf (stdout, " This option is set as many times as there are some eNB config files in the original test\n");
fprintf (stdout, "\t-p | --pdml <file> File name (with no path) of an original scenario that has to be reworked (IP addresses) with new testbed\n"); fprintf (stdout, "\t-p | --pdml <file> File name (with no path) of an original scenario that has to be reworked (IP addresses) with new testbed\n");
fprintf (stdout, "\t-s | --scenario-generic <file> File name (with no path) of a scenario that has to be customized (IP addresses) with new testbed\n");
fprintf (stdout, "\n"); fprintf (stdout, "\n");
fprintf (stdout, "\n"); fprintf (stdout, "\n");
fprintf (stdout, "Example of generate_scenario use cases: \n"); fprintf (stdout, "Example of generate_scenario use case: \n");
fprintf (stdout, "\n"); fprintf (stdout, "\n");
fprintf (stdout, " Case 1: generate a generix xml scenario from a captured pcap file: \n"); fprintf (stdout, " Generate a generix xml scenario from a captured pcap file: \n");
fprintf (stdout, " +---------------------+ \n"); fprintf (stdout, " +---------------------+ \n");
fprintf (stdout, " |captured pcap-ng file| \n"); fprintf (stdout, " |captured pcap-ng file| \n");
fprintf (stdout, " +----------+----------+ \n"); fprintf (stdout, " +----------+----------+ \n");
fprintf (stdout, " |\n"); fprintf (stdout, " |\n");
fprintf (stdout, " mme_test_s1_pcap2pdml \n"); fprintf (stdout, " mme_test_s1_pcap2pdml --pcap_file <`captured pcap-ng file`>\n");
fprintf (stdout, " |\n"); fprintf (stdout, " |\n");
fprintf (stdout, " +--------V----------+ +------------------------+\n"); fprintf (stdout, " +--------V----------+ +------------------------+\n");
fprintf (stdout, " |'pdml-in-orig' file| |'old-enb-conf-file' file|\n"); fprintf (stdout, " |'pdml-in-orig' file| |'old-enb-conf-file' file|\n");
...@@ -563,52 +564,14 @@ static void usage ( ...@@ -563,52 +564,14 @@ static void usage (
fprintf (stdout, " | |\n"); fprintf (stdout, " | |\n");
fprintf (stdout, " +----------------------------+\n"); fprintf (stdout, " +----------------------------+\n");
fprintf (stdout, " |\n"); fprintf (stdout, " |\n");
fprintf (stdout, " generate_scenario -t <dir> -p <file> -o <file> \n"); fprintf (stdout, " generate_scenario -t <dir> -p <'pdml-in-orig' file> -o <'old-enb-conf-file' file> \n");
fprintf (stdout, " |\n"); fprintf (stdout, " |\n");
fprintf (stdout, " +------------V--------------+\n"); fprintf (stdout, " +------------V--------------+\n");
fprintf (stdout, " +'xml-scenario-generic' file|\n"); fprintf (stdout, " +'xml-scenario-generic' file|\n");
fprintf (stdout, " +---------------------------+\n"); fprintf (stdout, " +---------------------------+\n");
fprintf (stdout, "\n"); fprintf (stdout, "\n");
fprintf (stdout, "\n");
fprintf (stdout, " Case 2: generate a dedicated xml scenario from generic xml scenario:\n");
fprintf (stdout, "\n");
fprintf (stdout, " +---------------------------+ +------------------------+\n");
fprintf (stdout, " |'xml-scenario-generic' file| |'new-enb-conf-file' file|\n");
fprintf (stdout, " +--------+------------------+ +------------+-----------+\n");
fprintf (stdout, " | |\n");
fprintf (stdout, " +--------------------+---------------+\n");
fprintf (stdout, " |\n");
fprintf (stdout, " generate_scenario -t <dir> -s <file> -n <file> \n");
fprintf (stdout, " |\n");
fprintf (stdout, " +--------------V--------------+\n");
fprintf (stdout, " +'xml-scenario-dedicated' file|\n");
fprintf (stdout, " +-----------------------------+\n");
fprintf (stdout, "\n");
fprintf (stdout, "\n");
fprintf (stdout, " Case 3 = case 1 + case 2: generate a dedicated xml scenario from a captured pcap file:\n");
fprintf (stdout, "\n");
fprintf (stdout, " +---------------------+\n");
fprintf (stdout, " |captured pcap-ng file|\n");
fprintf (stdout, " +----------+----------+\n");
fprintf (stdout, " |\n");
fprintf (stdout, " mme_test_s1_pcap2pdml \n");
fprintf (stdout, " |\n");
fprintf (stdout, " +------------------------+ +--------V----------+ +------------------------+\n");
fprintf (stdout, " |'old-enb-conf-file' file| |'pdml-in-orig' file| |'new-enb-conf-file' file|\n");
fprintf (stdout, " +------------+-----------+ +--------+----------+ +------------+-----------+\n");
fprintf (stdout, " | | |\n");
fprintf (stdout, " +----------------------+-------------------------+\n");
fprintf (stdout, " |\n");
fprintf (stdout, " V\n");
fprintf (stdout, " generate_scenario -t <dir> -p <file> -o <file> -n <file> \n");
fprintf (stdout, " | ^ |\n");
fprintf (stdout, " | | |\n");
fprintf (stdout, " +--------------V------------+ +------------V----------------+\n");
fprintf (stdout, " |'xml-scenario-generic' file| |'xml-scenario-dedicated' file|\n");
fprintf (stdout, " +---------------------------+ +-----------------------------+\n");
} }
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------
int int
config_parse_opt_line ( config_parse_opt_line (
...@@ -618,28 +581,22 @@ config_parse_opt_line ( ...@@ -618,28 +581,22 @@ config_parse_opt_line (
{ {
int option; int option;
int rv = 0; int rv = 0;
char *new_enb_config_file_name = NULL;
char *old_enb_config_file_name = NULL; char *old_enb_config_file_name = NULL;
char *pdml_in_file_name = NULL; char *pdml_in_file_name = NULL;
char *generic_scenario_file_name = NULL;
char *test_dir_name = NULL; char *test_dir_name = NULL;
enum long_option_e { enum long_option_e {
LONG_OPTION_START = 0x100, /* Start after regular single char options */ LONG_OPTION_START = 0x100, /* Start after regular single char options */
LONG_OPTION_NEW_ENB_CONF_FILE,
LONG_OPTION_OLD_ENB_CONF_FILE, LONG_OPTION_OLD_ENB_CONF_FILE,
LONG_OPTION_PDML, LONG_OPTION_PDML,
LONG_OPTION_TEST_DIR, LONG_OPTION_TEST_DIR,
LONG_OPTION_SCENARIO_GENERIC,
LONG_OPTION_HELP, LONG_OPTION_HELP,
}; };
static struct option long_options[] = { static struct option long_options[] = {
{"old-enb-conf-file", required_argument, 0, LONG_OPTION_OLD_ENB_CONF_FILE}, {"old-enb-conf-file", required_argument, 0, LONG_OPTION_OLD_ENB_CONF_FILE},
{"new-enb-conf-file", required_argument, 0, LONG_OPTION_NEW_ENB_CONF_FILE},
{"pdml ", required_argument, 0, LONG_OPTION_PDML}, {"pdml ", required_argument, 0, LONG_OPTION_PDML},
{"test-dir", required_argument, 0, LONG_OPTION_TEST_DIR}, {"test-dir", required_argument, 0, LONG_OPTION_TEST_DIR},
{"scenario-generic", required_argument, 0, LONG_OPTION_SCENARIO_GENERIC},
{"help", required_argument, 0, LONG_OPTION_HELP}, {"help", required_argument, 0, LONG_OPTION_HELP},
{NULL, 0, NULL, 0} {NULL, 0, NULL, 0}
}; };
...@@ -658,15 +615,6 @@ config_parse_opt_line ( ...@@ -658,15 +615,6 @@ config_parse_opt_line (
} }
break; break;
case LONG_OPTION_NEW_ENB_CONF_FILE:
case 'n':
if (optarg) {
new_enb_config_file_name = optarg;
printf("New eNB config file name is %s\n", new_enb_config_file_name);
rv |= GENERATE_DEDICATED_SCENARIO;
}
break;
case LONG_OPTION_PDML: case LONG_OPTION_PDML:
case 'p': case 'p':
if (optarg) { if (optarg) {
...@@ -688,15 +636,6 @@ config_parse_opt_line ( ...@@ -688,15 +636,6 @@ config_parse_opt_line (
} }
break; break;
case LONG_OPTION_SCENARIO_GENERIC:
case 's':
if (optarg) {
generic_scenario_file_name = strdup(optarg);
printf("Generic XML scenario input file name is %s\n", generic_scenario_file_name);
rv |= GENERATE_DEDICATED_SCENARIO;
}
break;
case LONG_OPTION_HELP: case LONG_OPTION_HELP:
case 'h': case 'h':
default: default:
...@@ -720,8 +659,8 @@ config_parse_opt_line ( ...@@ -720,8 +659,8 @@ config_parse_opt_line (
if (is_file_exists(old_enb_config_file_name, "Old eNB config file") != GS_IS_FILE) { if (is_file_exists(old_enb_config_file_name, "Old eNB config file") != GS_IS_FILE) {
fprintf(stderr, "Error: original eNB config file name %s is not found in dir %s\n", old_enb_config_file_name, g_test_dir); fprintf(stderr, "Error: original eNB config file name %s is not found in dir %s\n", old_enb_config_file_name, g_test_dir);
} }
enb_config_init(old_enb_config_file_name, ENB_CONFIG_PROPERTIES_INDEX_OLD); enb_config_init(old_enb_config_file_name);
enb_config_display(ENB_CONFIG_PROPERTIES_INDEX_OLD); enb_config_display();
if (NULL == pdml_in_file_name) { if (NULL == pdml_in_file_name) {
fprintf(stderr, "Error: please provide the PDML file name that should be in %s\n", g_test_dir); fprintf(stderr, "Error: please provide the PDML file name that should be in %s\n", g_test_dir);
...@@ -731,25 +670,6 @@ config_parse_opt_line ( ...@@ -731,25 +670,6 @@ config_parse_opt_line (
} }
g_pdml_in_origin = pdml_in_file_name; pdml_in_file_name = NULL; g_pdml_in_origin = pdml_in_file_name; pdml_in_file_name = NULL;
} }
if (rv & GENERATE_DEDICATED_SCENARIO) {
if (NULL == new_enb_config_file_name) {
fprintf(stderr, "Error: please provide the new eNB config file name that should be in %s\n", g_test_dir);
}
if (is_file_exists(new_enb_config_file_name, "New eNB config file") != GS_IS_FILE) {
fprintf(stderr, "Error: New eNB config file name %s is not found in dir %s\n", new_enb_config_file_name, g_test_dir);
}
enb_config_init(new_enb_config_file_name, ENB_CONFIG_PROPERTIES_INDEX_NEW);
enb_config_display(ENB_CONFIG_PROPERTIES_INDEX_NEW);
if (NULL == generic_scenario_file_name) {
fprintf(stderr, "Error: please provide the Generic scenario file name that should be in %s\n", g_test_dir);
}
if (is_file_exists(generic_scenario_file_name, "Generic scenario file") != GS_IS_FILE) {
fprintf(stderr, "Error: Generic scenario file name %s is not found in dir %s\n", generic_scenario_file_name, g_test_dir);
}
g_generic_scenario = generic_scenario_file_name; generic_scenario_file_name = NULL;
}
return rv; return rv;
} }
...@@ -765,16 +685,12 @@ int main( int argc, char **argv ) ...@@ -765,16 +685,12 @@ int main( int argc, char **argv )
exit(1); exit(1);
} }
memset((char*) &g_enb_properties[ENB_CONFIG_PROPERTIES_INDEX_OLD], 0 , sizeof(g_enb_properties[ENB_CONFIG_PROPERTIES_INDEX_OLD])); memset((char*) &g_enb_properties, 0 , sizeof(g_enb_properties));
memset((char*) &g_enb_properties[ENB_CONFIG_PROPERTIES_INDEX_NEW], 0 , sizeof(g_enb_properties[ENB_CONFIG_PROPERTIES_INDEX_NEW]));
actions = config_parse_opt_line (argc, argv); //Command-line options actions = config_parse_opt_line (argc, argv); //Command-line options
if (actions & GENERATE_GENERIC_SCENARIO) { if (actions & GENERATE_GENERIC_SCENARIO) {
generate_generic_scenario(g_test_dir, g_pdml_in_origin); generate_generic_scenario(g_test_dir, g_pdml_in_origin);
} }
/*if (actions & GENERATE_DEDICATED_SCENARIO) {
generate_dedicated_scenario(g_test_dir, g_pdml_in_origin);
}*/
return 0; return 0;
} }
...@@ -126,7 +126,7 @@ typedef struct Enb_properties_array_s { ...@@ -126,7 +126,7 @@ typedef struct Enb_properties_array_s {
Enb_properties_t *properties[EPC_TEST_SCENARIO_MAX_ENB]; Enb_properties_t *properties[EPC_TEST_SCENARIO_MAX_ENB];
} Enb_properties_array_t; } Enb_properties_array_t;
void enb_config_init(const char const * lib_config_file_name_pP, const boolean_t new_config_fileP); void enb_config_init(const char const * lib_config_file_name_pP);
#endif /* ENB_CONFIG_H_ */ #endif /* ENB_CONFIG_H_ */
/** @} */ /** @} */
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment