forked from acouzens/open5gs
[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:
parent
b18cf1bce8
commit
6ae9ecc697
|
@ -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));
|
||||
|
|
Loading…
Reference in New Issue