From 70dc633a96f6f4fe6876c582fb10792b01c344c8 Mon Sep 17 00:00:00 2001 From: Sukchan Lee Date: Sat, 15 Jul 2017 00:00:08 +0900 Subject: [PATCH] update it --- src/mme/mme_context.c | 139 ++++++++++++++++++++++++++++++++---------- test/s1ap_sm_test.c | 4 +- 2 files changed, 111 insertions(+), 32 deletions(-) diff --git a/src/mme/mme_context.c b/src/mme/mme_context.c index 26ba8341c8..d9c9c06448 100644 --- a/src/mme/mme_context.c +++ b/src/mme/mme_context.c @@ -61,26 +61,6 @@ status_t mme_context_init() plmn_id_build(&self.plmn_id, 1, 1, 2); self.tracking_area_code = 12345; - self.max_num_of_served_gummei = 1; - - self.served_gummei[0].num_of_plmn_id = 1; - /* MCC : 001, MNC : 01 */ - plmn_id_build(&self.served_gummei[0].plmn_id[0], 1, 1, 2); - - self.served_gummei[0].num_of_mme_gid = 1; - self.served_gummei[0].mme_gid[0] = 2; - self.served_gummei[0].num_of_mme_code = 1; - self.served_gummei[0].mme_code[0] = 1; - - self.served_gummei[1].num_of_plmn_id = 1; - /* MCC : 001, MNC : 01 */ - plmn_id_build(&self.served_gummei[1].plmn_id[0], 2, 2, 2); - - self.served_gummei[1].num_of_mme_gid = 1; - self.served_gummei[1].mme_gid[0] = 4; - self.served_gummei[1].num_of_mme_code = 1; - self.served_gummei[1].mme_code[0] = 3; - context_initialized = 1; return CORE_OK; @@ -129,6 +109,34 @@ static status_t mme_context_validation() sgw = mme_sgw_next(sgw); } + if (self.max_num_of_served_gummei == 0) + { + d_error("No MME.GUMMEI in '%s'", + context_self()->config.path); + return CORE_ERROR; + } + + if (self.served_gummei[0].num_of_plmn_id == 0) + { + d_error("No MME.GUMMEI.PLMN_ID in '%s'", + context_self()->config.path); + return CORE_ERROR; + } + + if (self.served_gummei[0].num_of_mme_gid == 0) + { + d_error("No MME.GUMMEI.MME_GID in '%s'", + context_self()->config.path); + return CORE_ERROR; + } + + if (self.served_gummei[0].num_of_mme_code == 0) + { + d_error("No MME.GUMMEI.MME_CODE in '%s'", + context_self()->config.path); + return CORE_ERROR; + } + if (self.num_of_integrity_order == 0) { d_error("No MME.SECURITY.INTEGRITY_ORDER in '%s'", @@ -166,8 +174,8 @@ status_t mme_context_parse_config() size_t mme_tokens = 0; size_t sgw_tokens = 0; size_t skip_tokens = 0; - int i, j, m, n, p; - int arr, size; + int i, j, m, n, p, q; + int arr, size, arr1, size1; rv = mme_context_prepare(); if (rv != CORE_OK) return rv; @@ -272,27 +280,96 @@ status_t mme_context_parse_config() size = (t+1)->size; } + self.max_num_of_served_gummei = size; for (arr = 0; arr < size; arr++) { + served_gummei_t *gummei = &self.served_gummei[arr]; for (n = 1; n > 0; m++, n--) { n += (t+m)->size; - if (jsmntok_equal(json, t+m, "MCC") == 0) + if (jsmntok_equal(json, t+m, "PLMN_ID") == 0) { - printf("mcc : %s\n", jsmntok_to_string(json, t+m+1)); - } - else if (jsmntok_equal(json, t+m, "MNC") == 0) - { - printf("mnc : %s\n", jsmntok_to_string(json, t+m+1)); - } + p = 1; + size1 = 1; + + if ((t+m+1)->type == JSMN_ARRAY) + { + p = 2; + size1 = (t+m+1)->size; + } + + for (arr1 = 0; arr1 < size1; arr1++) + { + char *mcc = NULL, *mnc = NULL; + for (q = 1; q > 0; p++, q--) + { + q += (t+m+p)->size; + if (jsmntok_equal(json, t+m+p, "MCC") == 0) + { + mcc = jsmntok_to_string(json, t+m+p+1); + } + else if (jsmntok_equal(json, t+m+p, "MNC") == 0) + { + mnc = jsmntok_to_string(json, t+m+p+1); + } + } + + if (mcc && mnc) + { + plmn_id_build(&gummei-> + plmn_id[gummei->num_of_plmn_id], + atoi(mcc), + atoi(mnc), strlen(mnc)); + gummei->num_of_plmn_id++; + } + } + } else if (jsmntok_equal(json, t+m, "MME_GID") == 0) { - printf("gid : %s\n", jsmntok_to_string(json, t+m+1)); + p = 1; + size1 = 1; + + if ((t+m+1)->type == JSMN_ARRAY) + { + p = 2; + size1 = (t+m+1)->size; + } + + for (arr1 = 0; arr1 < size1; arr1++) + { + char *v = jsmntok_to_string(json, t+m+p); + if (v) + { + gummei->mme_gid + [gummei->num_of_mme_gid] = atoi(v); + gummei->num_of_mme_gid++; + } + p++; + } } else if (jsmntok_equal(json, t+m, "MME_CODE") == 0) { - printf("code : %s\n", jsmntok_to_string(json, t+m+1)); + p = 1; + size1 = 1; + + if ((t+m+1)->type == JSMN_ARRAY) + { + p = 2; + size1 = (t+m+1)->size; + } + + for (arr1 = 0; arr1 < size1; arr1++) + { + char *v = jsmntok_to_string(json, t+m+p); + if (v) + { + gummei->mme_code + [gummei->num_of_mme_code] = atoi(v); + gummei->num_of_mme_code++; + } + p++; + } } } } diff --git a/test/s1ap_sm_test.c b/test/s1ap_sm_test.c index 98f53fd281..2f6c9a954f 100644 --- a/test/s1ap_sm_test.c +++ b/test/s1ap_sm_test.c @@ -60,7 +60,7 @@ static void s1ap_sm_test1(abts_case *tc, void *data) d_log_set_level(D_MSG_TO_STDOUT, D_LOG_LEVEL_FULL); } -#define NUM_OF_TEST_ENB 32 +#define NUM_OF_TEST_ENB 1 static void s1ap_sm_test2(abts_case *tc, void *data) { @@ -115,7 +115,9 @@ abts_suite *test_s1ap_sm(abts_suite *suite) { suite = ADD_SUITE(suite) +#if 0 abts_run_test(suite, s1ap_sm_test1, NULL); +#endif abts_run_test(suite, s1ap_sm_test2, NULL); return suite;