From 78eeb1ad454c4be9b5fc91b67a70846677b3a240 Mon Sep 17 00:00:00 2001 From: Sukchan Lee Date: Sun, 21 Jul 2019 20:25:29 +0900 Subject: [PATCH] [#231] TAI-LAI configuration changed --- src/mme/emm-build.c | 6 +++--- src/mme/esm-handler.c | 6 +++--- src/mme/mme-context.c | 31 +--------------------------- src/mme/mme-context.h | 12 +++-------- src/mme/mme-s11-handler.c | 6 +++--- src/mme/s1ap-build.c | 8 ++++---- src/mme/sgsap-build.c | 42 +++++++++++++++++++++++++++++--------- src/mme/sgsap-path.c | 19 ++++++++++------- tests/common/test-packet.c | 4 ++-- tests/csfb/crash-test.c | 4 +--- tests/sample-csfb.conf.in | 2 +- 11 files changed, 65 insertions(+), 75 deletions(-) diff --git a/src/mme/emm-build.c b/src/mme/emm-build.c index b49b80662b..63ad47a3b0 100644 --- a/src/mme/emm-build.c +++ b/src/mme/emm-build.c @@ -113,13 +113,13 @@ int emm_build_attach_accept( eps_network_feature_support->ims_vops = 1; if (MME_P_TMSI_IS_AVAILABLE(mme_ue)) { - ogs_assert(mme_ue->vlr); + ogs_assert(mme_ue->csmap); ogs_assert(mme_ue->p_tmsi); attach_accept->presencemask |= NAS_ATTACH_ACCEPT_LOCATION_AREA_IDENTIFICATION_PRESENT; - lai->nas_plmn_id = mme_ue->vlr->lai.nas_plmn_id; - lai->lac = mme_ue->vlr->lai.lac; + lai->nas_plmn_id = mme_ue->csmap->lai.nas_plmn_id; + lai->lac = mme_ue->csmap->lai.lac; ogs_debug(" LAI[PLMN_ID:%06x,LAC:%d]", plmn_id_hexdump(&lai->nas_plmn_id), lai->lac); diff --git a/src/mme/esm-handler.c b/src/mme/esm-handler.c index a71b07610b..8e6dd671d5 100644 --- a/src/mme/esm-handler.c +++ b/src/mme/esm-handler.c @@ -137,10 +137,10 @@ int esm_handle_information_response(mme_sess_t *sess, if (sess->pdn) { ogs_debug(" APN[%s]", sess->pdn->apn); if (SESSION_CONTEXT_IS_AVAILABLE(mme_ue)) { - mme_vlr_t *vlr = mme_vlr_find_by_tai(&mme_ue->tai); - mme_ue->vlr = vlr; + mme_csmap_t *csmap = mme_csmap_find_by_tai(&mme_ue->tai); + mme_ue->csmap = csmap; - if (vlr) { + if (csmap) { sgsap_send_location_update_request(mme_ue); } else { CLEAR_MME_UE_TIMER(mme_ue->t3450); diff --git a/src/mme/mme-context.c b/src/mme/mme-context.c index 0a5e11dc2b..aa79fbffa0 100644 --- a/src/mme/mme-context.c +++ b/src/mme/mme-context.c @@ -1783,35 +1783,6 @@ mme_vlr_t *mme_vlr_find_by_addr(ogs_sockaddr_t *addr) return NULL; } -mme_vlr_t *mme_vlr_find_by_tai(tai_t *tai) -{ - mme_vlr_t *vlr = NULL; - ogs_assert(tai); - - ogs_list_for_each(&self.vlr_list, vlr) { - nas_tai_t nas_tai; - nas_from_plmn_id(&nas_tai.nas_plmn_id, &tai->plmn_id); - nas_tai.tac = tai->tac; - if (memcmp(&vlr->tai, &nas_tai, sizeof(nas_tai_t)) == 0) - return vlr; - } - - return NULL; -} - -mme_vlr_t *mme_vlr_find_by_nas_lai(nas_lai_t *lai) -{ - mme_vlr_t *vlr = NULL; - ogs_assert(lai); - - ogs_list_for_each(&self.vlr_list, vlr) { - if (memcmp(&vlr->lai, lai, sizeof *lai) == 0) - return vlr; - } - - return NULL; -} - mme_csmap_t *mme_csmap_add(mme_vlr_t *vlr) { mme_csmap_t *csmap = NULL; @@ -2205,7 +2176,7 @@ mme_ue_t *mme_ue_add(enb_ue_t *enb_ue) ogs_assert_if_reached(); /* Clear VLR */ - mme_ue->vlr = NULL; + mme_ue->csmap = NULL; mme_ue->vlr_ostream_id = 0; /* Add All Timers */ diff --git a/src/mme/mme-context.h b/src/mme/mme-context.h index 61826c1653..c6f2b6dc61 100644 --- a/src/mme/mme-context.h +++ b/src/mme/mme-context.h @@ -187,8 +187,8 @@ typedef struct mme_pgw_s { } mme_pgw_t; #define MME_SGSAP_IS_CONNECTED(__mME) \ - ((__mME) && ((__mME)->vlr) && \ - (OGS_FSM_CHECK(&(__mME)->vlr->sm, sgsap_state_connected))) + ((__mME) && ((__mME)->csmap) && ((__mME)->csmap->vlr) && \ + (OGS_FSM_CHECK(&(__mME)->csmap->vlr->sm, sgsap_state_connected))) #define MME_P_TMSI_IS_AVAILABLE(__mME) \ (MME_SGSAP_IS_CONNECTED(__mME) && (__mME)->p_tmsi) @@ -199,9 +199,6 @@ typedef struct mme_vlr_s { ogs_timer_t *t_conn; /* client timer to connect to server */ - nas_tai_t tai; - nas_lai_t lai; - uint16_t max_num_of_ostreams;/* SCTP Max num of outbound streams */ uint16_t ostream_id; /* vlr_ostream_id generator */ @@ -506,7 +503,7 @@ struct mme_ue_s { int session_context_will_deleted; gtp_node_t *gnode; - mme_vlr_t *vlr; + mme_csmap_t *csmap; }; #define MME_HAVE_SGW_S1U_PATH(__sESS) \ @@ -665,10 +662,7 @@ void mme_vlr_remove_all(); ogs_socknode_t *mme_vlr_new_node(mme_vlr_t *vlr); void mme_vlr_free_node(mme_vlr_t *vlr); - mme_vlr_t *mme_vlr_find_by_addr(ogs_sockaddr_t *addr); -mme_vlr_t *mme_vlr_find_by_tai(tai_t *tai); -mme_vlr_t *mme_vlr_find_by_nas_lai(nas_lai_t *lai); mme_csmap_t *mme_csmap_add(mme_vlr_t *vlr); void mme_csmap_remove(mme_csmap_t *csmap); diff --git a/src/mme/mme-s11-handler.c b/src/mme/mme-s11-handler.c index 7f73700b09..6a3b730eac 100644 --- a/src/mme/mme-s11-handler.c +++ b/src/mme/mme-s11-handler.c @@ -110,10 +110,10 @@ void mme_s11_handle_create_session_response( ogs_assert(rv == OGS_OK); if (OGS_FSM_CHECK(&mme_ue->sm, emm_state_initial_context_setup)) { - mme_vlr_t *vlr = mme_vlr_find_by_tai(&mme_ue->tai); - mme_ue->vlr = vlr; + mme_csmap_t *csmap = mme_csmap_find_by_tai(&mme_ue->tai); + mme_ue->csmap = csmap; - if (vlr) { + if (csmap) { sgsap_send_location_update_request(mme_ue); } else { CLEAR_MME_UE_TIMER(mme_ue->t3450); diff --git a/src/mme/s1ap-build.c b/src/mme/s1ap-build.c index 45faeec28d..892d48761e 100644 --- a/src/mme/s1ap-build.c +++ b/src/mme/s1ap-build.c @@ -523,9 +523,9 @@ int s1ap_build_initial_context_setup_request( s1ap_buffer_to_OCTET_STRING(&mme_ue->tai.plmn_id, sizeof(plmn_id_t), &LAI->pLMNidentity); - ogs_assert(mme_ue->vlr); + ogs_assert(mme_ue->csmap); ogs_assert(mme_ue->p_tmsi); - s1ap_uint16_to_OCTET_STRING(mme_ue->vlr->lai.lac, &LAI->lAC); + s1ap_uint16_to_OCTET_STRING(mme_ue->csmap->lai.lac, &LAI->lAC); } /* Set UeRadioCapability if exists */ @@ -654,9 +654,9 @@ int s1ap_build_ue_context_modification_request( s1ap_buffer_to_OCTET_STRING(&mme_ue->tai.plmn_id, sizeof(plmn_id_t), &LAI->pLMNidentity); - ogs_assert(mme_ue->vlr); + ogs_assert(mme_ue->csmap); ogs_assert(mme_ue->p_tmsi); - s1ap_uint16_to_OCTET_STRING(mme_ue->vlr->lai.lac, &LAI->lAC); + s1ap_uint16_to_OCTET_STRING(mme_ue->csmap->lai.lac, &LAI->lAC); } else { ie = ogs_calloc(1, sizeof(S1AP_UEContextModificationRequestIEs_t)); diff --git a/src/mme/sgsap-build.c b/src/mme/sgsap-build.c index 8398696215..fdbfed4475 100644 --- a/src/mme/sgsap-build.c +++ b/src/mme/sgsap-build.c @@ -25,6 +25,7 @@ ogs_pkbuf_t *sgsap_build_location_update_request(mme_ue_t *mme_ue) { + mme_csmap_t *csmap = NULL; mme_vlr_t *vlr = NULL; ogs_tlv_t *root = NULL; ogs_pkbuf_t *pkbuf = NULL; @@ -36,7 +37,9 @@ ogs_pkbuf_t *sgsap_build_location_update_request(mme_ue_t *mme_ue) nas_lai_t lai; ogs_assert(mme_ue); - vlr = mme_ue->vlr; + csmap = mme_ue->csmap; + ogs_assert(csmap); + vlr = csmap->vlr; ogs_assert(vlr); root = ogs_tlv_add(NULL, SGSAP_IE_IMSI_TYPE, SGSAP_IE_IMSI_LEN, 0, @@ -50,7 +53,7 @@ ogs_pkbuf_t *sgsap_build_location_update_request(mme_ue_t *mme_ue) eps_update_type = SGSAP_EPS_UPDATE_IMSI_ATTACH; ogs_tlv_add(root, SGSAP_IE_EPS_UPDATE_TYPE, SGSAP_IE_EPS_UPDATE_LEN, 0, &eps_update_type); - memcpy(&lai, &vlr->lai, sizeof(nas_lai_t)); + memcpy(&lai, &csmap->lai, sizeof(nas_lai_t)); lai.lac = htons(lai.lac); ogs_tlv_add(root, SGSAP_IE_LAI_TYPE, SGSAP_IE_LAI_LEN, 0, &lai); @@ -67,12 +70,15 @@ ogs_pkbuf_t *sgsap_build_location_update_request(mme_ue_t *mme_ue) } ogs_pkbuf_t *sgsap_build_tmsi_reallocation_complete(mme_ue_t *mme_ue) { + mme_csmap_t *csmap = NULL; mme_vlr_t *vlr = NULL; ogs_tlv_t *root = NULL; ogs_pkbuf_t *pkbuf = NULL; ogs_assert(mme_ue); - vlr = mme_ue->vlr; + csmap = mme_ue->csmap; + ogs_assert(csmap); + vlr = csmap->vlr; ogs_assert(vlr); root = ogs_tlv_add(NULL, SGSAP_IE_IMSI_TYPE, SGSAP_IE_IMSI_LEN, 0, @@ -92,6 +98,7 @@ ogs_pkbuf_t *sgsap_build_tmsi_reallocation_complete(mme_ue_t *mme_ue) ogs_pkbuf_t *sgsap_build_detach_indication(mme_ue_t *mme_ue) { + mme_csmap_t *csmap = NULL; mme_vlr_t *vlr = NULL; ogs_tlv_t *root = NULL; ogs_pkbuf_t *pkbuf = NULL; @@ -103,7 +110,9 @@ ogs_pkbuf_t *sgsap_build_detach_indication(mme_ue_t *mme_ue) uint8_t indication = SGSAP_EPS_DETACH_UE_INITIATED; ogs_assert(mme_ue); - vlr = mme_ue->vlr; + csmap = mme_ue->csmap; + ogs_assert(csmap); + vlr = csmap->vlr; ogs_assert(vlr); switch (mme_ue->nas_eps.detach.detach_type) { @@ -165,12 +174,15 @@ ogs_pkbuf_t *sgsap_build_detach_indication(mme_ue_t *mme_ue) ogs_pkbuf_t *sgsap_build_mo_csfb_indication(mme_ue_t *mme_ue) { + mme_csmap_t *csmap = NULL; mme_vlr_t *vlr = NULL; ogs_tlv_t *root = NULL; ogs_pkbuf_t *pkbuf = NULL; ogs_assert(mme_ue); - vlr = mme_ue->vlr; + csmap = mme_ue->csmap; + ogs_assert(csmap); + vlr = csmap->vlr; ogs_assert(vlr); root = ogs_tlv_add(NULL, SGSAP_IE_IMSI_TYPE, SGSAP_IE_IMSI_LEN, 0, @@ -220,12 +232,15 @@ ogs_pkbuf_t *sgsap_build_paging_reject( ogs_pkbuf_t *sgsap_build_service_request(mme_ue_t *mme_ue, uint8_t emm_mode) { + mme_csmap_t *csmap = NULL; mme_vlr_t *vlr = NULL; ogs_tlv_t *root = NULL; ogs_pkbuf_t *pkbuf = NULL; ogs_assert(mme_ue); - vlr = mme_ue->vlr; + csmap = mme_ue->csmap; + ogs_assert(csmap); + vlr = csmap->vlr; ogs_assert(vlr); root = ogs_tlv_add(NULL, SGSAP_IE_IMSI_TYPE, SGSAP_IE_IMSI_LEN, 0, @@ -281,15 +296,19 @@ ogs_pkbuf_t *sgsap_build_reset_ack(mme_vlr_t *vlr) ogs_pkbuf_t *sgsap_build_uplink_unidata( mme_ue_t *mme_ue, nas_message_container_t *nas_message_container) { + mme_csmap_t *csmap = NULL; mme_vlr_t *vlr = NULL; ogs_tlv_t *root = NULL; ogs_pkbuf_t *pkbuf = NULL; - ogs_assert(mme_ue); - vlr = mme_ue->vlr; - ogs_assert(vlr); ogs_assert(nas_message_container); + ogs_assert(mme_ue); + csmap = mme_ue->csmap; + ogs_assert(csmap); + vlr = csmap->vlr; + ogs_assert(vlr); + root = ogs_tlv_add(NULL, SGSAP_IE_IMSI_TYPE, SGSAP_IE_IMSI_LEN, 0, &mme_ue->nas_mobile_identity_imsi); @@ -310,12 +329,15 @@ ogs_pkbuf_t *sgsap_build_uplink_unidata( ogs_pkbuf_t *sgsap_build_ue_unreachable(mme_ue_t *mme_ue, uint8_t sgs_cause) { + mme_csmap_t *csmap = NULL; mme_vlr_t *vlr = NULL; ogs_tlv_t *root = NULL; ogs_pkbuf_t *pkbuf = NULL; ogs_assert(mme_ue); - vlr = mme_ue->vlr; + csmap = mme_ue->csmap; + ogs_assert(csmap); + vlr = csmap->vlr; ogs_assert(vlr); root = ogs_tlv_add(NULL, SGSAP_IE_IMSI_TYPE, SGSAP_IE_IMSI_LEN, 0, diff --git a/src/mme/sgsap-path.c b/src/mme/sgsap-path.c index 1f2bb1793c..4b3b1301e0 100644 --- a/src/mme/sgsap-path.c +++ b/src/mme/sgsap-path.c @@ -89,11 +89,6 @@ int sgsap_send_to_vlr_with_sid( ogs_assert(sock); ogs_debug(" VLR-IP[%s]", OGS_ADDR(node->addr, buf)); - ogs_debug(" TAI[PLMN_ID:%06x,TAC:%d]", - plmn_id_hexdump(&vlr->tai.nas_plmn_id), vlr->tai.tac); - ogs_debug(" LAI[PLMN_ID:%06x,LAC:%d]", - plmn_id_hexdump(&vlr->lai.nas_plmn_id), vlr->lai.lac); - rv = sgsap_send(sock, pkbuf, node->addr, stream_no); if (rv != OGS_OK) { ogs_error("sgsap_send() failed"); @@ -108,12 +103,22 @@ int sgsap_send_to_vlr_with_sid( int sgsap_send_to_vlr(mme_ue_t *mme_ue, ogs_pkbuf_t *pkbuf) { + mme_csmap_t *csmap = NULL; mme_vlr_t *vlr = NULL; - ogs_assert(mme_ue); + ogs_assert(pkbuf); - vlr = mme_ue->vlr; + + ogs_assert(mme_ue); + csmap = mme_ue->csmap; + ogs_assert(csmap); + vlr = csmap->vlr; ogs_assert(vlr); + ogs_debug(" TAI[PLMN_ID:%06x,TAC:%d]", + plmn_id_hexdump(&csmap->tai.nas_plmn_id), csmap->tai.tac); + ogs_debug(" LAI[PLMN_ID:%06x,LAC:%d]", + plmn_id_hexdump(&csmap->lai.nas_plmn_id), csmap->lai.lac); + return sgsap_send_to_vlr_with_sid(vlr, pkbuf, mme_ue->vlr_ostream_id); } diff --git a/tests/common/test-packet.c b/tests/common/test-packet.c index 6272fd4820..8486c31ebc 100644 --- a/tests/common/test-packet.c +++ b/tests/common/test-packet.c @@ -3254,13 +3254,13 @@ int testsgsap_location_update_accept(ogs_pkbuf_t **pkbuf, int i) { char *payload[TESTS1AP_MAX_MESSAGE] = { "0a01082926240000 111893040509f107 09260e05f49ee88e 64", - "", + "0a01087942120000 000030040527f412 c9580e05f437ab9c c5", "", }; uint16_t len[TESTS1AP_MAX_MESSAGE] = { 25, - 0, + 25, 0, }; char hexbuf[MAX_SDU_LEN]; diff --git a/tests/csfb/crash-test.c b/tests/csfb/crash-test.c index 336cf40b30..7023fc988b 100644 --- a/tests/csfb/crash-test.c +++ b/tests/csfb/crash-test.c @@ -160,18 +160,16 @@ static void test1_func(abts_case *tc, void *data) rv = testenb_s1ap_send(s1ap, sendbuf); ABTS_INT_EQUAL(tc, OGS_OK, rv); -#if 0 /* Receive SGsAP-Location-Update-Request */ recvbuf = testvlr_sgsap_read(sgsap); ABTS_PTR_NOTNULL(tc, recvbuf); ogs_pkbuf_free(recvbuf); /* Send SGsAP-Location-Update-Accept */ - rv = testsgsap_location_update_accept(&sendbuf, 0); + rv = testsgsap_location_update_accept(&sendbuf, 1); ABTS_INT_EQUAL(tc, OGS_OK, rv); rv = testvlr_sgsap_send(sgsap, sendbuf); ABTS_INT_EQUAL(tc, OGS_OK, rv); -#endif /* Receive Initial Context Setup Request + * Attach Accept + diff --git a/tests/sample-csfb.conf.in b/tests/sample-csfb.conf.in index a0c4b805e5..889c0d01af 100644 --- a/tests/sample-csfb.conf.in +++ b/tests/sample-csfb.conf.in @@ -52,7 +52,7 @@ mme: plmn_id: mcc: 724 mnc: 21 - lac: 2342 + lac: 51544 gummei: plmn_id: mcc: 901