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);
|
ogs_warn("Invalid APN[%s]", req->access_point_name.apn);
|
||||||
return OGS_ERROR;
|
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 &
|
if (req->presencemask &
|
||||||
|
@ -157,6 +175,24 @@ int esm_handle_information_response(mme_sess_t *sess,
|
||||||
ogs_assert(sess->session->name);
|
ogs_assert(sess->session->name);
|
||||||
ogs_debug(" APN[%s]", 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) &&
|
if (SESSION_CONTEXT_IS_AVAILABLE(mme_ue) &&
|
||||||
OGS_PDU_SESSION_TYPE_IS_VALID(sess->session->paa.session_type)) {
|
OGS_PDU_SESSION_TYPE_IS_VALID(sess->session->paa.session_type)) {
|
||||||
mme_csmap_t *csmap = mme_csmap_find_by_tai(&mme_ue->tai);
|
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);
|
ogs_error("Invalid APN[%s]", rsp->access_point_name.apn);
|
||||||
else
|
else
|
||||||
ogs_error("No APN");
|
ogs_error("No APN");
|
||||||
|
|
||||||
ogs_assert(OGS_OK ==
|
ogs_assert(OGS_OK ==
|
||||||
nas_eps_send_pdn_connectivity_reject(
|
nas_eps_send_pdn_connectivity_reject(
|
||||||
sess, ESM_CAUSE_MISSING_OR_UNKNOWN_APN));
|
sess, ESM_CAUSE_MISSING_OR_UNKNOWN_APN));
|
||||||
|
|
Loading…
Reference in New Issue