[MME] check PDN mismatch (#1263)

if PDN mismatched between UE and HSS, PDN connectivitiy reject message
will be sent to eNB.
This commit is contained in:
Sukchan Lee 2021-12-02 22:40:47 +09:00
parent b18cf1bce8
commit 6ae9ecc697
1 changed files with 37 additions and 0 deletions

View File

@ -71,6 +71,24 @@ int esm_handle_pdn_connectivity_request(mme_bearer_t *bearer,
ogs_warn("Invalid APN[%s]", req->access_point_name.apn);
return OGS_ERROR;
}
if (sess->session->session_type == OGS_PDU_SESSION_TYPE_IPV4 ||
sess->session->session_type == OGS_PDU_SESSION_TYPE_IPV6 ||
sess->session->session_type == OGS_PDU_SESSION_TYPE_IPV4V6) {
uint8_t derived_pdn_type =
(sess->session->session_type & sess->request_type.type);
if (derived_pdn_type == 0) {
ogs_error("Cannot derived PDN Type [UE:%d,HSS:%d]",
sess->request_type.type, sess->session->session_type);
ogs_assert(OGS_OK ==
nas_eps_send_pdn_connectivity_reject(
sess, ESM_CAUSE_UNKNOWN_PDN_TYPE));
return OGS_ERROR;
}
} else {
ogs_fatal("Invalid PDN_TYPE[%d]", sess->session->session_type);
ogs_assert_if_reached();
}
}
if (req->presencemask &
@ -157,6 +175,24 @@ int esm_handle_information_response(mme_sess_t *sess,
ogs_assert(sess->session->name);
ogs_debug(" APN[%s]", sess->session->name);
if (sess->session->session_type == OGS_PDU_SESSION_TYPE_IPV4 ||
sess->session->session_type == OGS_PDU_SESSION_TYPE_IPV6 ||
sess->session->session_type == OGS_PDU_SESSION_TYPE_IPV4V6) {
uint8_t derived_pdn_type =
(sess->session->session_type & sess->request_type.type);
if (derived_pdn_type == 0) {
ogs_error("Cannot derived PDN Type [UE:%d,HSS:%d]",
sess->request_type.type, sess->session->session_type);
ogs_assert(OGS_OK ==
nas_eps_send_pdn_connectivity_reject(
sess, ESM_CAUSE_UNKNOWN_PDN_TYPE));
return OGS_ERROR;
}
} else {
ogs_fatal("Invalid PDN_TYPE[%d]", sess->session->session_type);
ogs_assert_if_reached();
}
if (SESSION_CONTEXT_IS_AVAILABLE(mme_ue) &&
OGS_PDU_SESSION_TYPE_IS_VALID(sess->session->paa.session_type)) {
mme_csmap_t *csmap = mme_csmap_find_by_tai(&mme_ue->tai);
@ -178,6 +214,7 @@ int esm_handle_information_response(mme_sess_t *sess,
ogs_error("Invalid APN[%s]", rsp->access_point_name.apn);
else
ogs_error("No APN");
ogs_assert(OGS_OK ==
nas_eps_send_pdn_connectivity_reject(
sess, ESM_CAUSE_MISSING_OR_UNKNOWN_APN));