[#231] TAI-LAI configuration changed

This commit is contained in:
Sukchan Lee 2019-07-21 20:25:29 +09:00
parent a40d1dd2af
commit 78eeb1ad45
11 changed files with 65 additions and 75 deletions

View File

@ -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);

View File

@ -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);

View File

@ -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 */

View File

@ -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);

View File

@ -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);

View File

@ -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));

View File

@ -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,

View File

@ -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);
}

View File

@ -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];

View File

@ -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 +

View File

@ -52,7 +52,7 @@ mme:
plmn_id:
mcc: 724
mnc: 21
lac: 2342
lac: 51544
gummei:
plmn_id:
mcc: 901