forked from acouzens/open5gs
Added more log in GTP Error (#1920)
This commit is contained in:
parent
fa5b2fe075
commit
a4dc990bf1
|
@ -82,8 +82,9 @@ void mme_s11_handle_create_session_response(
|
||||||
ogs_gtp2_create_session_response_t *rsp)
|
ogs_gtp2_create_session_response_t *rsp)
|
||||||
{
|
{
|
||||||
int rv, i;
|
int rv, i;
|
||||||
uint8_t cause_value = 0;
|
uint8_t cause_value = OGS_GTP2_CAUSE_UNDEFINED_VALUE;
|
||||||
ogs_gtp2_cause_t *cause = NULL;
|
uint8_t session_cause = OGS_GTP2_CAUSE_UNDEFINED_VALUE;
|
||||||
|
uint8_t bearer_cause = OGS_GTP2_CAUSE_UNDEFINED_VALUE;
|
||||||
ogs_gtp2_f_teid_t *sgw_s11_teid = NULL;
|
ogs_gtp2_f_teid_t *sgw_s11_teid = NULL;
|
||||||
ogs_gtp2_f_teid_t *pgw_s5c_teid = NULL;
|
ogs_gtp2_f_teid_t *pgw_s5c_teid = NULL;
|
||||||
ogs_gtp2_f_teid_t *sgw_s1u_teid = NULL;
|
ogs_gtp2_f_teid_t *sgw_s1u_teid = NULL;
|
||||||
|
@ -126,19 +127,30 @@ void mme_s11_handle_create_session_response(
|
||||||
rv = ogs_gtp_xact_commit(xact);
|
rv = ogs_gtp_xact_commit(xact);
|
||||||
ogs_expect_or_return(rv == OGS_OK);
|
ogs_expect_or_return(rv == OGS_OK);
|
||||||
|
|
||||||
|
/************************
|
||||||
|
* Getting Cause Value
|
||||||
|
************************/
|
||||||
|
if (rsp->cause.presence && rsp->cause.data) {
|
||||||
|
ogs_gtp2_cause_t *cause = rsp->cause.data;
|
||||||
|
ogs_assert(cause);
|
||||||
|
session_cause = cause->value;
|
||||||
|
}
|
||||||
|
|
||||||
/************************
|
/************************
|
||||||
* Check MME-UE Context
|
* Check MME-UE Context
|
||||||
************************/
|
************************/
|
||||||
cause_value = OGS_GTP2_CAUSE_REQUEST_ACCEPTED;
|
cause_value = OGS_GTP2_CAUSE_REQUEST_ACCEPTED;
|
||||||
|
|
||||||
if (!mme_ue_from_teid) {
|
if (!mme_ue_from_teid) {
|
||||||
ogs_error("No Context in TEID");
|
ogs_error("[%s] No Context in TEID [Cause:%d]",
|
||||||
|
mme_ue->imsi_bcd, session_cause);
|
||||||
cause_value = OGS_GTP2_CAUSE_CONTEXT_NOT_FOUND;
|
cause_value = OGS_GTP2_CAUSE_CONTEXT_NOT_FOUND;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (cause_value != OGS_GTP2_CAUSE_REQUEST_ACCEPTED) {
|
if (cause_value != OGS_GTP2_CAUSE_REQUEST_ACCEPTED) {
|
||||||
if (create_action == OGS_GTP_CREATE_IN_ATTACH_REQUEST) {
|
if (create_action == OGS_GTP_CREATE_IN_ATTACH_REQUEST) {
|
||||||
ogs_error("[%s] Attach reject", mme_ue->imsi_bcd);
|
ogs_error("[%s] Attach reject [Cause:%d]",
|
||||||
|
mme_ue->imsi_bcd, session_cause);
|
||||||
ogs_assert(OGS_OK == nas_eps_send_attach_reject(mme_ue,
|
ogs_assert(OGS_OK == nas_eps_send_attach_reject(mme_ue,
|
||||||
OGS_NAS_EMM_CAUSE_NETWORK_FAILURE, OGS_NAS_ESM_CAUSE_NETWORK_FAILURE));
|
OGS_NAS_EMM_CAUSE_NETWORK_FAILURE, OGS_NAS_ESM_CAUSE_NETWORK_FAILURE));
|
||||||
}
|
}
|
||||||
|
@ -152,7 +164,8 @@ void mme_s11_handle_create_session_response(
|
||||||
ogs_assert(cause_value == OGS_GTP2_CAUSE_REQUEST_ACCEPTED);
|
ogs_assert(cause_value == OGS_GTP2_CAUSE_REQUEST_ACCEPTED);
|
||||||
|
|
||||||
if (rsp->sender_f_teid_for_control_plane.presence == 0) {
|
if (rsp->sender_f_teid_for_control_plane.presence == 0) {
|
||||||
ogs_error("No S11 TEID");
|
ogs_error("[%s] No S11 TEID [Cause:%d]",
|
||||||
|
mme_ue->imsi_bcd, session_cause);
|
||||||
cause_value = OGS_GTP2_CAUSE_CONDITIONAL_IE_MISSING;
|
cause_value = OGS_GTP2_CAUSE_CONDITIONAL_IE_MISSING;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -163,7 +176,8 @@ void mme_s11_handle_create_session_response(
|
||||||
} else {
|
} else {
|
||||||
|
|
||||||
if (rsp->pgw_s5_s8__s2a_s2b_f_teid_for_pmip_based_interface_or_for_gtp_based_control_plane_interface.presence == 0) {
|
if (rsp->pgw_s5_s8__s2a_s2b_f_teid_for_pmip_based_interface_or_for_gtp_based_control_plane_interface.presence == 0) {
|
||||||
ogs_error("No S5C TEID");
|
ogs_error("[%s] No S5C TEID [Cause:%d]",
|
||||||
|
mme_ue->imsi_bcd, session_cause);
|
||||||
cause_value = OGS_GTP2_CAUSE_CONDITIONAL_IE_MISSING;
|
cause_value = OGS_GTP2_CAUSE_CONDITIONAL_IE_MISSING;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -182,25 +196,29 @@ void mme_s11_handle_create_session_response(
|
||||||
rsp->pdn_address_allocation.len);
|
rsp->pdn_address_allocation.len);
|
||||||
|
|
||||||
if (!OGS_PDU_SESSION_TYPE_IS_VALID(paa.session_type)) {
|
if (!OGS_PDU_SESSION_TYPE_IS_VALID(paa.session_type)) {
|
||||||
ogs_error("Unknown PDN Type[%u]", paa.session_type);
|
ogs_error("[%s] Unknown PDN Type [Session:%u, Cause:%d]",
|
||||||
|
mme_ue->imsi_bcd, paa.session_type, session_cause);
|
||||||
cause_value = OGS_GTP2_CAUSE_MANDATORY_IE_INCORRECT;
|
cause_value = OGS_GTP2_CAUSE_MANDATORY_IE_INCORRECT;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
ogs_error("No PDN Address Allocation");
|
ogs_error("[%s] No PDN Address Allocation [Cause:%d]",
|
||||||
|
mme_ue->imsi_bcd, session_cause);
|
||||||
cause_value = OGS_GTP2_CAUSE_CONDITIONAL_IE_MISSING;
|
cause_value = OGS_GTP2_CAUSE_CONDITIONAL_IE_MISSING;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (rsp->cause.presence == 0) {
|
if (rsp->cause.presence == 0) {
|
||||||
ogs_error("No Cause");
|
ogs_error("[%s] No Cause [VALUE:%d]", mme_ue->imsi_bcd, session_cause);
|
||||||
cause_value = OGS_GTP2_CAUSE_MANDATORY_IE_MISSING;
|
cause_value = OGS_GTP2_CAUSE_MANDATORY_IE_MISSING;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (cause_value != OGS_GTP2_CAUSE_REQUEST_ACCEPTED) {
|
if (cause_value != OGS_GTP2_CAUSE_REQUEST_ACCEPTED) {
|
||||||
if (create_action == OGS_GTP_CREATE_IN_ATTACH_REQUEST) {
|
if (create_action == OGS_GTP_CREATE_IN_ATTACH_REQUEST) {
|
||||||
ogs_error("[%s] Attach reject", mme_ue->imsi_bcd);
|
ogs_error("[%s] Attach reject [Cause:%d]",
|
||||||
|
mme_ue->imsi_bcd, session_cause);
|
||||||
ogs_assert(OGS_OK == nas_eps_send_attach_reject(mme_ue,
|
ogs_assert(OGS_OK == nas_eps_send_attach_reject(mme_ue,
|
||||||
OGS_NAS_EMM_CAUSE_NETWORK_FAILURE, OGS_NAS_ESM_CAUSE_NETWORK_FAILURE));
|
OGS_NAS_EMM_CAUSE_NETWORK_FAILURE,
|
||||||
|
OGS_NAS_ESM_CAUSE_NETWORK_FAILURE));
|
||||||
}
|
}
|
||||||
mme_send_delete_session_or_mme_ue_context_release(mme_ue);
|
mme_send_delete_session_or_mme_ue_context_release(mme_ue);
|
||||||
return;
|
return;
|
||||||
|
@ -212,35 +230,38 @@ void mme_s11_handle_create_session_response(
|
||||||
ogs_assert(cause_value == OGS_GTP2_CAUSE_REQUEST_ACCEPTED);
|
ogs_assert(cause_value == OGS_GTP2_CAUSE_REQUEST_ACCEPTED);
|
||||||
|
|
||||||
for (i = 0; i < OGS_BEARER_PER_UE; i++) {
|
for (i = 0; i < OGS_BEARER_PER_UE; i++) {
|
||||||
|
ogs_gtp2_cause_t *cause = NULL;
|
||||||
|
|
||||||
if (rsp->bearer_contexts_created[i].cause.presence == 0) {
|
if (rsp->bearer_contexts_created[i].cause.presence == 0) {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
cause = rsp->bearer_contexts_created[i].cause.data;
|
cause = rsp->bearer_contexts_created[i].cause.data;
|
||||||
ogs_assert(cause);
|
if (cause == NULL) {
|
||||||
cause_value = cause->value;
|
ogs_error("No Cause Data");
|
||||||
if (cause_value != OGS_GTP2_CAUSE_REQUEST_ACCEPTED) {
|
continue;
|
||||||
ogs_error("GTP Bearer Cause [VALUE:%d]", cause_value);
|
}
|
||||||
|
bearer_cause = cause->value;
|
||||||
|
if (bearer_cause != OGS_GTP2_CAUSE_REQUEST_ACCEPTED) {
|
||||||
|
ogs_error("[%s] GTP Bearer Cause [VALUE:%d]",
|
||||||
|
mme_ue->imsi_bcd, bearer_cause);
|
||||||
if (create_action == OGS_GTP_CREATE_IN_ATTACH_REQUEST) {
|
if (create_action == OGS_GTP_CREATE_IN_ATTACH_REQUEST) {
|
||||||
ogs_error("[%s] Attach reject", mme_ue->imsi_bcd);
|
ogs_error("[%s] Attach reject", mme_ue->imsi_bcd);
|
||||||
ogs_assert(OGS_OK == nas_eps_send_attach_reject(mme_ue,
|
ogs_assert(OGS_OK == nas_eps_send_attach_reject(mme_ue,
|
||||||
OGS_NAS_EMM_CAUSE_NETWORK_FAILURE, OGS_NAS_ESM_CAUSE_NETWORK_FAILURE));
|
OGS_NAS_EMM_CAUSE_NETWORK_FAILURE,
|
||||||
|
OGS_NAS_ESM_CAUSE_NETWORK_FAILURE));
|
||||||
}
|
}
|
||||||
mme_send_delete_session_or_mme_ue_context_release(mme_ue);
|
mme_send_delete_session_or_mme_ue_context_release(mme_ue);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
cause = rsp->cause.data;
|
if (session_cause != OGS_GTP2_CAUSE_REQUEST_ACCEPTED &&
|
||||||
ogs_assert(cause);
|
session_cause != OGS_GTP2_CAUSE_REQUEST_ACCEPTED_PARTIALLY &&
|
||||||
cause_value = cause->value;
|
session_cause !=
|
||||||
if (cause_value != OGS_GTP2_CAUSE_REQUEST_ACCEPTED &&
|
|
||||||
cause_value != OGS_GTP2_CAUSE_REQUEST_ACCEPTED_PARTIALLY &&
|
|
||||||
cause_value !=
|
|
||||||
OGS_GTP2_CAUSE_NEW_PDN_TYPE_DUE_TO_NETWORK_PREFERENCE &&
|
OGS_GTP2_CAUSE_NEW_PDN_TYPE_DUE_TO_NETWORK_PREFERENCE &&
|
||||||
cause_value !=
|
session_cause !=
|
||||||
OGS_GTP2_CAUSE_NEW_PDN_TYPE_DUE_TO_SINGLE_ADDRESS_BEARER_ONLY) {
|
OGS_GTP2_CAUSE_NEW_PDN_TYPE_DUE_TO_SINGLE_ADDRESS_BEARER_ONLY) {
|
||||||
ogs_error("GTP Cause [Value:%d]", cause_value);
|
ogs_error("[%s] GTP Cause [VALUE:%d]", mme_ue->imsi_bcd, session_cause);
|
||||||
if (create_action == OGS_GTP_CREATE_IN_ATTACH_REQUEST) {
|
if (create_action == OGS_GTP_CREATE_IN_ATTACH_REQUEST) {
|
||||||
ogs_error("[%s] Attach reject", mme_ue->imsi_bcd);
|
ogs_error("[%s] Attach reject", mme_ue->imsi_bcd);
|
||||||
ogs_assert(OGS_OK == nas_eps_send_attach_reject(mme_ue,
|
ogs_assert(OGS_OK == nas_eps_send_attach_reject(mme_ue,
|
||||||
|
@ -404,9 +425,9 @@ void mme_s11_handle_modify_bearer_response(
|
||||||
ogs_gtp2_modify_bearer_response_t *rsp)
|
ogs_gtp2_modify_bearer_response_t *rsp)
|
||||||
{
|
{
|
||||||
int rv;
|
int rv;
|
||||||
uint8_t cause_value = 0;
|
uint8_t cause_value = OGS_GTP2_CAUSE_UNDEFINED_VALUE;
|
||||||
|
uint8_t session_cause = OGS_GTP2_CAUSE_UNDEFINED_VALUE;
|
||||||
int modify_action = 0;
|
int modify_action = 0;
|
||||||
ogs_gtp2_cause_t *cause = NULL;
|
|
||||||
|
|
||||||
mme_ue_t *mme_ue = NULL;
|
mme_ue_t *mme_ue = NULL;
|
||||||
sgw_ue_t *sgw_ue = NULL;
|
sgw_ue_t *sgw_ue = NULL;
|
||||||
|
@ -428,13 +449,23 @@ void mme_s11_handle_modify_bearer_response(
|
||||||
rv = ogs_gtp_xact_commit(xact);
|
rv = ogs_gtp_xact_commit(xact);
|
||||||
ogs_expect_or_return(rv == OGS_OK);
|
ogs_expect_or_return(rv == OGS_OK);
|
||||||
|
|
||||||
|
/************************
|
||||||
|
* Getting Cause Value
|
||||||
|
************************/
|
||||||
|
if (rsp->cause.presence && rsp->cause.data) {
|
||||||
|
ogs_gtp2_cause_t *cause = rsp->cause.data;
|
||||||
|
ogs_assert(cause);
|
||||||
|
session_cause = cause->value;
|
||||||
|
}
|
||||||
|
|
||||||
/************************
|
/************************
|
||||||
* Check MME-UE Context
|
* Check MME-UE Context
|
||||||
************************/
|
************************/
|
||||||
cause_value = OGS_GTP2_CAUSE_REQUEST_ACCEPTED;
|
cause_value = OGS_GTP2_CAUSE_REQUEST_ACCEPTED;
|
||||||
|
|
||||||
if (!mme_ue_from_teid) {
|
if (!mme_ue_from_teid) {
|
||||||
ogs_error("No Context in TEID");
|
ogs_error("[%s] No Context in TEID [Cause:%d]",
|
||||||
|
mme_ue->imsi_bcd, session_cause);
|
||||||
cause_value = OGS_GTP2_CAUSE_CONTEXT_NOT_FOUND;
|
cause_value = OGS_GTP2_CAUSE_CONTEXT_NOT_FOUND;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -449,7 +480,7 @@ void mme_s11_handle_modify_bearer_response(
|
||||||
ogs_assert(cause_value == OGS_GTP2_CAUSE_REQUEST_ACCEPTED);
|
ogs_assert(cause_value == OGS_GTP2_CAUSE_REQUEST_ACCEPTED);
|
||||||
|
|
||||||
if (rsp->cause.presence == 0) {
|
if (rsp->cause.presence == 0) {
|
||||||
ogs_error("No Cause");
|
ogs_error("[%s] No Cause [%d]", mme_ue->imsi_bcd, session_cause);
|
||||||
cause_value = OGS_GTP2_CAUSE_MANDATORY_IE_MISSING;
|
cause_value = OGS_GTP2_CAUSE_MANDATORY_IE_MISSING;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -463,11 +494,8 @@ void mme_s11_handle_modify_bearer_response(
|
||||||
********************/
|
********************/
|
||||||
ogs_assert(cause_value == OGS_GTP2_CAUSE_REQUEST_ACCEPTED);
|
ogs_assert(cause_value == OGS_GTP2_CAUSE_REQUEST_ACCEPTED);
|
||||||
|
|
||||||
cause = rsp->cause.data;
|
if (session_cause != OGS_GTP2_CAUSE_REQUEST_ACCEPTED) {
|
||||||
ogs_assert(cause);
|
ogs_error("[%s] GTP Cause [VALUE:%d]", mme_ue->imsi_bcd, session_cause);
|
||||||
cause_value = cause->value;
|
|
||||||
if (cause_value != OGS_GTP2_CAUSE_REQUEST_ACCEPTED) {
|
|
||||||
ogs_error("GTP Cause [Value:%d]", cause_value);
|
|
||||||
mme_send_delete_session_or_mme_ue_context_release(mme_ue);
|
mme_send_delete_session_or_mme_ue_context_release(mme_ue);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -498,7 +526,7 @@ void mme_s11_handle_delete_session_response(
|
||||||
ogs_gtp2_delete_session_response_t *rsp)
|
ogs_gtp2_delete_session_response_t *rsp)
|
||||||
{
|
{
|
||||||
int rv;
|
int rv;
|
||||||
uint8_t cause_value = 0;
|
uint8_t cause_value = OGS_GTP2_CAUSE_UNDEFINED_VALUE;
|
||||||
int action = 0;
|
int action = 0;
|
||||||
sgw_ue_t *source_ue = NULL, *target_ue = NULL;
|
sgw_ue_t *source_ue = NULL, *target_ue = NULL;
|
||||||
mme_sess_t *sess = NULL;
|
mme_sess_t *sess = NULL;
|
||||||
|
@ -548,7 +576,7 @@ void mme_s11_handle_delete_session_response(
|
||||||
|
|
||||||
cause_value = cause->value;
|
cause_value = cause->value;
|
||||||
if (cause_value != OGS_GTP2_CAUSE_REQUEST_ACCEPTED)
|
if (cause_value != OGS_GTP2_CAUSE_REQUEST_ACCEPTED)
|
||||||
ogs_error("GTP Cause [Value:%d] - Ignored", cause_value);
|
ogs_error("GTP Cause [VALUE:%d] - Ignored", cause_value);
|
||||||
}
|
}
|
||||||
|
|
||||||
/********************
|
/********************
|
||||||
|
@ -669,7 +697,7 @@ void mme_s11_handle_create_bearer_request(
|
||||||
ogs_gtp_xact_t *xact, mme_ue_t *mme_ue,
|
ogs_gtp_xact_t *xact, mme_ue_t *mme_ue,
|
||||||
ogs_gtp2_create_bearer_request_t *req)
|
ogs_gtp2_create_bearer_request_t *req)
|
||||||
{
|
{
|
||||||
uint8_t cause_value = 0;
|
uint8_t cause_value = OGS_GTP2_CAUSE_UNDEFINED_VALUE;
|
||||||
mme_bearer_t *bearer = NULL, *default_bearer = NULL;
|
mme_bearer_t *bearer = NULL, *default_bearer = NULL;
|
||||||
mme_sess_t *sess = NULL;
|
mme_sess_t *sess = NULL;
|
||||||
sgw_ue_t *sgw_ue = NULL;
|
sgw_ue_t *sgw_ue = NULL;
|
||||||
|
@ -848,7 +876,7 @@ void mme_s11_handle_update_bearer_request(
|
||||||
ogs_gtp_xact_t *xact, mme_ue_t *mme_ue,
|
ogs_gtp_xact_t *xact, mme_ue_t *mme_ue,
|
||||||
ogs_gtp2_update_bearer_request_t *req)
|
ogs_gtp2_update_bearer_request_t *req)
|
||||||
{
|
{
|
||||||
uint8_t cause_value = 0;
|
uint8_t cause_value = OGS_GTP2_CAUSE_UNDEFINED_VALUE;
|
||||||
mme_bearer_t *bearer = NULL;
|
mme_bearer_t *bearer = NULL;
|
||||||
mme_sess_t *sess = NULL;
|
mme_sess_t *sess = NULL;
|
||||||
sgw_ue_t *sgw_ue = NULL;
|
sgw_ue_t *sgw_ue = NULL;
|
||||||
|
@ -985,7 +1013,7 @@ void mme_s11_handle_delete_bearer_request(
|
||||||
ogs_gtp_xact_t *xact, mme_ue_t *mme_ue,
|
ogs_gtp_xact_t *xact, mme_ue_t *mme_ue,
|
||||||
ogs_gtp2_delete_bearer_request_t *req)
|
ogs_gtp2_delete_bearer_request_t *req)
|
||||||
{
|
{
|
||||||
uint8_t cause_value = 0;
|
uint8_t cause_value = OGS_GTP2_CAUSE_UNDEFINED_VALUE;
|
||||||
|
|
||||||
mme_bearer_t *bearer = NULL;
|
mme_bearer_t *bearer = NULL;
|
||||||
mme_sess_t *sess = NULL;
|
mme_sess_t *sess = NULL;
|
||||||
|
@ -1101,7 +1129,7 @@ void mme_s11_handle_release_access_bearers_response(
|
||||||
ogs_gtp2_release_access_bearers_response_t *rsp)
|
ogs_gtp2_release_access_bearers_response_t *rsp)
|
||||||
{
|
{
|
||||||
int rv;
|
int rv;
|
||||||
uint8_t cause_value = 0;
|
uint8_t cause_value = OGS_GTP2_CAUSE_UNDEFINED_VALUE;
|
||||||
int action = 0;
|
int action = 0;
|
||||||
enb_ue_t *enb_ue = NULL;
|
enb_ue_t *enb_ue = NULL;
|
||||||
|
|
||||||
|
@ -1144,7 +1172,7 @@ void mme_s11_handle_release_access_bearers_response(
|
||||||
|
|
||||||
cause_value = cause->value;
|
cause_value = cause->value;
|
||||||
if (cause_value != OGS_GTP2_CAUSE_REQUEST_ACCEPTED)
|
if (cause_value != OGS_GTP2_CAUSE_REQUEST_ACCEPTED)
|
||||||
ogs_error("GTP Cause [Value:%d, ACTION:%d]", cause_value, action);
|
ogs_error("GTP Cause [VALUE:%d, ACTION:%d]", cause_value, action);
|
||||||
}
|
}
|
||||||
|
|
||||||
/********************
|
/********************
|
||||||
|
@ -1251,7 +1279,7 @@ void mme_s11_handle_downlink_data_notification(
|
||||||
ogs_gtp_xact_t *xact, mme_ue_t *mme_ue,
|
ogs_gtp_xact_t *xact, mme_ue_t *mme_ue,
|
||||||
ogs_gtp2_downlink_data_notification_t *noti)
|
ogs_gtp2_downlink_data_notification_t *noti)
|
||||||
{
|
{
|
||||||
uint8_t cause_value = 0;
|
uint8_t cause_value = OGS_GTP2_CAUSE_UNDEFINED_VALUE;
|
||||||
|
|
||||||
mme_bearer_t *bearer = NULL;
|
mme_bearer_t *bearer = NULL;
|
||||||
sgw_ue_t *sgw_ue = NULL;
|
sgw_ue_t *sgw_ue = NULL;
|
||||||
|
@ -1391,8 +1419,8 @@ void mme_s11_handle_create_indirect_data_forwarding_tunnel_response(
|
||||||
ogs_gtp2_create_indirect_data_forwarding_tunnel_response_t *rsp)
|
ogs_gtp2_create_indirect_data_forwarding_tunnel_response_t *rsp)
|
||||||
{
|
{
|
||||||
int rv;
|
int rv;
|
||||||
uint8_t cause_value = 0;
|
uint8_t cause_value = OGS_GTP2_CAUSE_UNDEFINED_VALUE;
|
||||||
ogs_gtp2_cause_t *cause = NULL;
|
uint8_t session_cause = OGS_GTP2_CAUSE_UNDEFINED_VALUE;
|
||||||
sgw_ue_t *sgw_ue = NULL;
|
sgw_ue_t *sgw_ue = NULL;
|
||||||
mme_bearer_t *bearer = NULL;
|
mme_bearer_t *bearer = NULL;
|
||||||
mme_ue_t *mme_ue = NULL;
|
mme_ue_t *mme_ue = NULL;
|
||||||
|
@ -1417,13 +1445,23 @@ void mme_s11_handle_create_indirect_data_forwarding_tunnel_response(
|
||||||
rv = ogs_gtp_xact_commit(xact);
|
rv = ogs_gtp_xact_commit(xact);
|
||||||
ogs_expect_or_return(rv == OGS_OK);
|
ogs_expect_or_return(rv == OGS_OK);
|
||||||
|
|
||||||
|
/************************
|
||||||
|
* Getting Cause Value
|
||||||
|
************************/
|
||||||
|
if (rsp->cause.presence && rsp->cause.data) {
|
||||||
|
ogs_gtp2_cause_t *cause = rsp->cause.data;
|
||||||
|
ogs_assert(cause);
|
||||||
|
session_cause = cause->value;
|
||||||
|
}
|
||||||
|
|
||||||
/************************
|
/************************
|
||||||
* Check MME-UE Context
|
* Check MME-UE Context
|
||||||
************************/
|
************************/
|
||||||
cause_value = OGS_GTP2_CAUSE_REQUEST_ACCEPTED;
|
cause_value = OGS_GTP2_CAUSE_REQUEST_ACCEPTED;
|
||||||
|
|
||||||
if (!mme_ue_from_teid) {
|
if (!mme_ue_from_teid) {
|
||||||
ogs_error("No Context in TEID");
|
ogs_error("[%s] No Context in TEID [Cause:%d]",
|
||||||
|
mme_ue->imsi_bcd, session_cause);
|
||||||
cause_value = OGS_GTP2_CAUSE_CONTEXT_NOT_FOUND;
|
cause_value = OGS_GTP2_CAUSE_CONTEXT_NOT_FOUND;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1438,7 +1476,7 @@ void mme_s11_handle_create_indirect_data_forwarding_tunnel_response(
|
||||||
ogs_assert(cause_value == OGS_GTP2_CAUSE_REQUEST_ACCEPTED);
|
ogs_assert(cause_value == OGS_GTP2_CAUSE_REQUEST_ACCEPTED);
|
||||||
|
|
||||||
if (rsp->cause.presence == 0) {
|
if (rsp->cause.presence == 0) {
|
||||||
ogs_error("No Cause");
|
ogs_error("[%s] No Cause [VALUE:%d]", mme_ue->imsi_bcd, session_cause);
|
||||||
cause_value = OGS_GTP2_CAUSE_MANDATORY_IE_MISSING;
|
cause_value = OGS_GTP2_CAUSE_MANDATORY_IE_MISSING;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1452,11 +1490,8 @@ void mme_s11_handle_create_indirect_data_forwarding_tunnel_response(
|
||||||
********************/
|
********************/
|
||||||
ogs_assert(cause_value == OGS_GTP2_CAUSE_REQUEST_ACCEPTED);
|
ogs_assert(cause_value == OGS_GTP2_CAUSE_REQUEST_ACCEPTED);
|
||||||
|
|
||||||
cause = rsp->cause.data;
|
if (session_cause != OGS_GTP2_CAUSE_REQUEST_ACCEPTED) {
|
||||||
ogs_assert(cause);
|
ogs_error("[%s] GTP Cause [VALUE:%d]", mme_ue->imsi_bcd, session_cause);
|
||||||
cause_value = cause->value;
|
|
||||||
if (cause_value != OGS_GTP2_CAUSE_REQUEST_ACCEPTED) {
|
|
||||||
ogs_error("GTP Cause [Value:%d]", cause_value);
|
|
||||||
mme_send_delete_session_or_mme_ue_context_release(mme_ue);
|
mme_send_delete_session_or_mme_ue_context_release(mme_ue);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -1509,8 +1544,8 @@ void mme_s11_handle_delete_indirect_data_forwarding_tunnel_response(
|
||||||
ogs_gtp2_delete_indirect_data_forwarding_tunnel_response_t *rsp)
|
ogs_gtp2_delete_indirect_data_forwarding_tunnel_response_t *rsp)
|
||||||
{
|
{
|
||||||
int rv;
|
int rv;
|
||||||
uint8_t cause_value = 0;
|
uint8_t cause_value = OGS_GTP2_CAUSE_UNDEFINED_VALUE;
|
||||||
ogs_gtp2_cause_t *cause = NULL;
|
uint8_t session_cause = OGS_GTP2_CAUSE_UNDEFINED_VALUE;
|
||||||
int action = 0;
|
int action = 0;
|
||||||
mme_ue_t *mme_ue = NULL;
|
mme_ue_t *mme_ue = NULL;
|
||||||
sgw_ue_t *sgw_ue = NULL;
|
sgw_ue_t *sgw_ue = NULL;
|
||||||
|
@ -1533,13 +1568,23 @@ void mme_s11_handle_delete_indirect_data_forwarding_tunnel_response(
|
||||||
rv = ogs_gtp_xact_commit(xact);
|
rv = ogs_gtp_xact_commit(xact);
|
||||||
ogs_expect_or_return(rv == OGS_OK);
|
ogs_expect_or_return(rv == OGS_OK);
|
||||||
|
|
||||||
|
/************************
|
||||||
|
* Getting Cause Value
|
||||||
|
************************/
|
||||||
|
if (rsp->cause.presence && rsp->cause.data) {
|
||||||
|
ogs_gtp2_cause_t *cause = rsp->cause.data;
|
||||||
|
ogs_assert(cause);
|
||||||
|
session_cause = cause->value;
|
||||||
|
}
|
||||||
|
|
||||||
/************************
|
/************************
|
||||||
* Check MME-UE Context
|
* Check MME-UE Context
|
||||||
************************/
|
************************/
|
||||||
cause_value = OGS_GTP2_CAUSE_REQUEST_ACCEPTED;
|
cause_value = OGS_GTP2_CAUSE_REQUEST_ACCEPTED;
|
||||||
|
|
||||||
if (!mme_ue_from_teid) {
|
if (!mme_ue_from_teid) {
|
||||||
ogs_error("No Context in TEID");
|
ogs_error("[%s] No Context in TEID [Cause:%d]",
|
||||||
|
mme_ue->imsi_bcd, session_cause);
|
||||||
cause_value = OGS_GTP2_CAUSE_CONTEXT_NOT_FOUND;
|
cause_value = OGS_GTP2_CAUSE_CONTEXT_NOT_FOUND;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1554,7 +1599,7 @@ void mme_s11_handle_delete_indirect_data_forwarding_tunnel_response(
|
||||||
ogs_assert(cause_value == OGS_GTP2_CAUSE_REQUEST_ACCEPTED);
|
ogs_assert(cause_value == OGS_GTP2_CAUSE_REQUEST_ACCEPTED);
|
||||||
|
|
||||||
if (rsp->cause.presence == 0) {
|
if (rsp->cause.presence == 0) {
|
||||||
ogs_error("No Cause");
|
ogs_error("[%s] No Cause [VALUE:%d]", mme_ue->imsi_bcd, session_cause);
|
||||||
cause_value = OGS_GTP2_CAUSE_MANDATORY_IE_MISSING;
|
cause_value = OGS_GTP2_CAUSE_MANDATORY_IE_MISSING;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1568,11 +1613,8 @@ void mme_s11_handle_delete_indirect_data_forwarding_tunnel_response(
|
||||||
********************/
|
********************/
|
||||||
ogs_assert(cause_value == OGS_GTP2_CAUSE_REQUEST_ACCEPTED);
|
ogs_assert(cause_value == OGS_GTP2_CAUSE_REQUEST_ACCEPTED);
|
||||||
|
|
||||||
cause = rsp->cause.data;
|
if (session_cause != OGS_GTP2_CAUSE_REQUEST_ACCEPTED) {
|
||||||
ogs_assert(cause);
|
ogs_error("GTP Cause [VALUE:%d]", session_cause);
|
||||||
cause_value = cause->value;
|
|
||||||
if (cause_value != OGS_GTP2_CAUSE_REQUEST_ACCEPTED) {
|
|
||||||
ogs_error("GTP Cause [Value:%d]", cause_value);
|
|
||||||
mme_send_delete_session_or_mme_ue_context_release(mme_ue);
|
mme_send_delete_session_or_mme_ue_context_release(mme_ue);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -1604,7 +1646,7 @@ void mme_s11_handle_bearer_resource_failure_indication(
|
||||||
ogs_gtp2_bearer_resource_failure_indication_t *ind)
|
ogs_gtp2_bearer_resource_failure_indication_t *ind)
|
||||||
{
|
{
|
||||||
int rv;
|
int rv;
|
||||||
uint8_t cause_value = 0;
|
uint8_t cause_value = OGS_GTP2_CAUSE_UNDEFINED_VALUE;
|
||||||
|
|
||||||
mme_bearer_t *bearer = NULL;
|
mme_bearer_t *bearer = NULL;
|
||||||
mme_sess_t *sess = NULL;
|
mme_sess_t *sess = NULL;
|
||||||
|
@ -1640,7 +1682,7 @@ void mme_s11_handle_bearer_resource_failure_indication(
|
||||||
ogs_assert(cause);
|
ogs_assert(cause);
|
||||||
|
|
||||||
cause_value = cause->value;
|
cause_value = cause->value;
|
||||||
ogs_warn("GTP Cause [Value:%d] - Ignored", cause_value);
|
ogs_warn("GTP Cause [VALUE:%d] - Ignored", cause_value);
|
||||||
} else {
|
} else {
|
||||||
ogs_error("No Cause");
|
ogs_error("No Cause");
|
||||||
}
|
}
|
||||||
|
|
|
@ -64,8 +64,9 @@ void sgwc_s5c_handle_create_session_response(
|
||||||
ogs_pkbuf_t *gtpbuf, ogs_gtp2_message_t *message)
|
ogs_pkbuf_t *gtpbuf, ogs_gtp2_message_t *message)
|
||||||
{
|
{
|
||||||
int rv, i;
|
int rv, i;
|
||||||
uint8_t cause_value;
|
uint8_t cause_value = OGS_GTP2_CAUSE_UNDEFINED_VALUE;
|
||||||
ogs_gtp2_cause_t *cause = NULL;
|
uint8_t session_cause = OGS_GTP2_CAUSE_UNDEFINED_VALUE;
|
||||||
|
uint8_t bearer_cause = OGS_GTP2_CAUSE_UNDEFINED_VALUE;
|
||||||
|
|
||||||
sgwc_ue_t *sgwc_ue = NULL;
|
sgwc_ue_t *sgwc_ue = NULL;
|
||||||
sgwc_bearer_t *bearer = NULL;
|
sgwc_bearer_t *bearer = NULL;
|
||||||
|
@ -96,6 +97,15 @@ void sgwc_s5c_handle_create_session_response(
|
||||||
rv = ogs_gtp_xact_commit(s5c_xact);
|
rv = ogs_gtp_xact_commit(s5c_xact);
|
||||||
ogs_expect(rv == OGS_OK);
|
ogs_expect(rv == OGS_OK);
|
||||||
|
|
||||||
|
/************************
|
||||||
|
* Getting Cause Value
|
||||||
|
************************/
|
||||||
|
if (rsp->cause.presence && rsp->cause.data) {
|
||||||
|
ogs_gtp2_cause_t *cause = rsp->cause.data;
|
||||||
|
ogs_assert(cause);
|
||||||
|
session_cause = cause->value;
|
||||||
|
}
|
||||||
|
|
||||||
/************************
|
/************************
|
||||||
* Check Session Context
|
* Check Session Context
|
||||||
*
|
*
|
||||||
|
@ -104,7 +114,7 @@ void sgwc_s5c_handle_create_session_response(
|
||||||
cause_value = OGS_GTP2_CAUSE_REQUEST_ACCEPTED;
|
cause_value = OGS_GTP2_CAUSE_REQUEST_ACCEPTED;
|
||||||
|
|
||||||
if (!sess) {
|
if (!sess) {
|
||||||
ogs_error("No Context in TEID");
|
ogs_error("No Context in TEID [Cause:%d]", session_cause);
|
||||||
cause_value = OGS_GTP2_CAUSE_CONTEXT_NOT_FOUND;
|
cause_value = OGS_GTP2_CAUSE_CONTEXT_NOT_FOUND;
|
||||||
} else {
|
} else {
|
||||||
sgwc_ue = sess->sgwc_ue;
|
sgwc_ue = sess->sgwc_ue;
|
||||||
|
@ -124,7 +134,7 @@ void sgwc_s5c_handle_create_session_response(
|
||||||
ogs_assert(cause_value == OGS_GTP2_CAUSE_REQUEST_ACCEPTED);
|
ogs_assert(cause_value == OGS_GTP2_CAUSE_REQUEST_ACCEPTED);
|
||||||
|
|
||||||
if (rsp->pgw_s5_s8__s2a_s2b_f_teid_for_pmip_based_interface_or_for_gtp_based_control_plane_interface.presence == 0) {
|
if (rsp->pgw_s5_s8__s2a_s2b_f_teid_for_pmip_based_interface_or_for_gtp_based_control_plane_interface.presence == 0) {
|
||||||
ogs_error("No GTP TEID");
|
ogs_error("No GTP TEID [Cause:%d]", session_cause);
|
||||||
cause_value = OGS_GTP2_CAUSE_CONDITIONAL_IE_MISSING;
|
cause_value = OGS_GTP2_CAUSE_CONDITIONAL_IE_MISSING;
|
||||||
}
|
}
|
||||||
if (rsp->pdn_address_allocation.presence) {
|
if (rsp->pdn_address_allocation.presence) {
|
||||||
|
@ -134,17 +144,18 @@ void sgwc_s5c_handle_create_session_response(
|
||||||
ogs_min(sizeof(paa), rsp->pdn_address_allocation.len));
|
ogs_min(sizeof(paa), rsp->pdn_address_allocation.len));
|
||||||
|
|
||||||
if (!OGS_PDU_SESSION_TYPE_IS_VALID(paa.session_type)) {
|
if (!OGS_PDU_SESSION_TYPE_IS_VALID(paa.session_type)) {
|
||||||
ogs_error("Unknown PDN Type %u", paa.session_type);
|
ogs_error("Unknown PDN Type %u, Cause:%d",
|
||||||
|
paa.session_type, session_cause);
|
||||||
cause_value = OGS_GTP2_CAUSE_MANDATORY_IE_INCORRECT;
|
cause_value = OGS_GTP2_CAUSE_MANDATORY_IE_INCORRECT;
|
||||||
}
|
}
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
ogs_error("No PDN Address Allocation");
|
ogs_error("No PDN Address Allocation [Cause:%d]", session_cause);
|
||||||
cause_value = OGS_GTP2_CAUSE_CONDITIONAL_IE_MISSING;
|
cause_value = OGS_GTP2_CAUSE_CONDITIONAL_IE_MISSING;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (rsp->cause.presence == 0) {
|
if (rsp->cause.presence == 0) {
|
||||||
ogs_error("No Cause");
|
ogs_error("No Cause [VALUE:%d]", session_cause);
|
||||||
cause_value = OGS_GTP2_CAUSE_CONDITIONAL_IE_MISSING;
|
cause_value = OGS_GTP2_CAUSE_CONDITIONAL_IE_MISSING;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -161,35 +172,36 @@ void sgwc_s5c_handle_create_session_response(
|
||||||
ogs_assert(cause_value == OGS_GTP2_CAUSE_REQUEST_ACCEPTED);
|
ogs_assert(cause_value == OGS_GTP2_CAUSE_REQUEST_ACCEPTED);
|
||||||
|
|
||||||
for (i = 0; i < OGS_BEARER_PER_UE; i++) {
|
for (i = 0; i < OGS_BEARER_PER_UE; i++) {
|
||||||
|
ogs_gtp2_cause_t *cause = NULL;
|
||||||
if (rsp->bearer_contexts_created[i].cause.presence == 0) {
|
if (rsp->bearer_contexts_created[i].cause.presence == 0) {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
cause = rsp->bearer_contexts_created[i].cause.data;
|
cause = rsp->bearer_contexts_created[i].cause.data;
|
||||||
ogs_assert(cause);
|
if (cause == NULL) {
|
||||||
cause_value = cause->value;
|
ogs_error("No Cause Data");
|
||||||
if (cause_value != OGS_GTP2_CAUSE_REQUEST_ACCEPTED) {
|
continue;
|
||||||
ogs_error("GTP Bearer Cause [VALUE:%d]", cause_value);
|
}
|
||||||
|
bearer_cause = cause->value;
|
||||||
|
if (bearer_cause != OGS_GTP2_CAUSE_REQUEST_ACCEPTED) {
|
||||||
|
ogs_error("GTP Bearer Cause [VALUE:%d]", bearer_cause);
|
||||||
ogs_gtp_send_error_message(
|
ogs_gtp_send_error_message(
|
||||||
s11_xact, sgwc_ue ? sgwc_ue->mme_s11_teid : 0,
|
s11_xact, sgwc_ue ? sgwc_ue->mme_s11_teid : 0,
|
||||||
OGS_GTP2_CREATE_SESSION_RESPONSE_TYPE, cause_value);
|
OGS_GTP2_CREATE_SESSION_RESPONSE_TYPE, bearer_cause);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
cause = rsp->cause.data;
|
if (session_cause != OGS_GTP2_CAUSE_REQUEST_ACCEPTED &&
|
||||||
ogs_assert(cause);
|
session_cause != OGS_GTP2_CAUSE_REQUEST_ACCEPTED_PARTIALLY &&
|
||||||
cause_value = cause->value;
|
session_cause !=
|
||||||
if (cause_value != OGS_GTP2_CAUSE_REQUEST_ACCEPTED &&
|
|
||||||
cause_value != OGS_GTP2_CAUSE_REQUEST_ACCEPTED_PARTIALLY &&
|
|
||||||
cause_value !=
|
|
||||||
OGS_GTP2_CAUSE_NEW_PDN_TYPE_DUE_TO_NETWORK_PREFERENCE &&
|
OGS_GTP2_CAUSE_NEW_PDN_TYPE_DUE_TO_NETWORK_PREFERENCE &&
|
||||||
cause_value !=
|
session_cause !=
|
||||||
OGS_GTP2_CAUSE_NEW_PDN_TYPE_DUE_TO_SINGLE_ADDRESS_BEARER_ONLY) {
|
OGS_GTP2_CAUSE_NEW_PDN_TYPE_DUE_TO_SINGLE_ADDRESS_BEARER_ONLY) {
|
||||||
ogs_error("GTP Cause [Value:%d]", cause_value);
|
ogs_error("GTP Cause [VALUE:%d]", session_cause);
|
||||||
ogs_gtp_send_error_message(
|
ogs_gtp_send_error_message(
|
||||||
s11_xact, sgwc_ue ? sgwc_ue->mme_s11_teid : 0,
|
s11_xact, sgwc_ue ? sgwc_ue->mme_s11_teid : 0,
|
||||||
OGS_GTP2_CREATE_SESSION_RESPONSE_TYPE, cause_value);
|
OGS_GTP2_CREATE_SESSION_RESPONSE_TYPE, session_cause);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -289,8 +301,8 @@ void sgwc_s5c_handle_modify_bearer_response(
|
||||||
ogs_pkbuf_t *gtpbuf, ogs_gtp2_message_t *message)
|
ogs_pkbuf_t *gtpbuf, ogs_gtp2_message_t *message)
|
||||||
{
|
{
|
||||||
int rv;
|
int rv;
|
||||||
ogs_gtp2_cause_t *cause = NULL;
|
uint8_t cause_value = OGS_GTP2_CAUSE_UNDEFINED_VALUE;
|
||||||
uint8_t cause_value;
|
uint8_t session_cause = OGS_GTP2_CAUSE_UNDEFINED_VALUE;
|
||||||
int modify_action;
|
int modify_action;
|
||||||
|
|
||||||
sgwc_ue_t *sgwc_ue = NULL;
|
sgwc_ue_t *sgwc_ue = NULL;
|
||||||
|
@ -316,6 +328,15 @@ void sgwc_s5c_handle_modify_bearer_response(
|
||||||
rv = ogs_gtp_xact_commit(s5c_xact);
|
rv = ogs_gtp_xact_commit(s5c_xact);
|
||||||
ogs_expect(rv == OGS_OK);
|
ogs_expect(rv == OGS_OK);
|
||||||
|
|
||||||
|
/************************
|
||||||
|
* Getting Cause Value
|
||||||
|
************************/
|
||||||
|
if (rsp->cause.presence && rsp->cause.data) {
|
||||||
|
ogs_gtp2_cause_t *cause = rsp->cause.data;
|
||||||
|
ogs_assert(cause);
|
||||||
|
session_cause = cause->value;
|
||||||
|
}
|
||||||
|
|
||||||
/************************
|
/************************
|
||||||
* Check Session Context
|
* Check Session Context
|
||||||
*
|
*
|
||||||
|
@ -324,7 +345,7 @@ void sgwc_s5c_handle_modify_bearer_response(
|
||||||
cause_value = OGS_GTP2_CAUSE_REQUEST_ACCEPTED;
|
cause_value = OGS_GTP2_CAUSE_REQUEST_ACCEPTED;
|
||||||
|
|
||||||
if (!sess) {
|
if (!sess) {
|
||||||
ogs_error("No Context in TEID");
|
ogs_error("No Context in TEID [Cause:%d]", session_cause);
|
||||||
cause_value = OGS_GTP2_CAUSE_CONTEXT_NOT_FOUND;
|
cause_value = OGS_GTP2_CAUSE_CONTEXT_NOT_FOUND;
|
||||||
} else {
|
} else {
|
||||||
sgwc_ue = sess->sgwc_ue;
|
sgwc_ue = sess->sgwc_ue;
|
||||||
|
@ -349,7 +370,7 @@ void sgwc_s5c_handle_modify_bearer_response(
|
||||||
ogs_assert(cause_value == OGS_GTP2_CAUSE_REQUEST_ACCEPTED);
|
ogs_assert(cause_value == OGS_GTP2_CAUSE_REQUEST_ACCEPTED);
|
||||||
|
|
||||||
if (rsp->cause.presence == 0) {
|
if (rsp->cause.presence == 0) {
|
||||||
ogs_error("No Cause");
|
ogs_error("No Cause [VALUE:%d]", session_cause);
|
||||||
cause_value = OGS_GTP2_CAUSE_MANDATORY_IE_MISSING;
|
cause_value = OGS_GTP2_CAUSE_MANDATORY_IE_MISSING;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -370,19 +391,16 @@ void sgwc_s5c_handle_modify_bearer_response(
|
||||||
********************/
|
********************/
|
||||||
ogs_assert(cause_value == OGS_GTP2_CAUSE_REQUEST_ACCEPTED);
|
ogs_assert(cause_value == OGS_GTP2_CAUSE_REQUEST_ACCEPTED);
|
||||||
|
|
||||||
cause = rsp->cause.data;
|
if (session_cause != OGS_GTP2_CAUSE_REQUEST_ACCEPTED) {
|
||||||
ogs_assert(cause);
|
ogs_error("GTP Cause [VALUE:%d]", session_cause);
|
||||||
cause_value = cause->value;
|
|
||||||
if (cause_value != OGS_GTP2_CAUSE_REQUEST_ACCEPTED) {
|
|
||||||
ogs_error("GTP Cause [Value:%d]", cause_value);
|
|
||||||
if (modify_action == OGS_GTP_MODIFY_IN_PATH_SWITCH_REQUEST)
|
if (modify_action == OGS_GTP_MODIFY_IN_PATH_SWITCH_REQUEST)
|
||||||
ogs_gtp_send_error_message(
|
ogs_gtp_send_error_message(
|
||||||
s11_xact, sgwc_ue ? sgwc_ue->mme_s11_teid : 0,
|
s11_xact, sgwc_ue ? sgwc_ue->mme_s11_teid : 0,
|
||||||
OGS_GTP2_CREATE_SESSION_RESPONSE_TYPE, cause_value);
|
OGS_GTP2_CREATE_SESSION_RESPONSE_TYPE, session_cause);
|
||||||
else
|
else
|
||||||
ogs_gtp_send_error_message(
|
ogs_gtp_send_error_message(
|
||||||
s11_xact, sgwc_ue ? sgwc_ue->mme_s11_teid : 0,
|
s11_xact, sgwc_ue ? sgwc_ue->mme_s11_teid : 0,
|
||||||
OGS_GTP2_MODIFY_BEARER_RESPONSE_TYPE, cause_value);
|
OGS_GTP2_MODIFY_BEARER_RESPONSE_TYPE, session_cause);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -420,7 +438,8 @@ void sgwc_s5c_handle_delete_session_response(
|
||||||
ogs_pkbuf_t *gtpbuf, ogs_gtp2_message_t *message)
|
ogs_pkbuf_t *gtpbuf, ogs_gtp2_message_t *message)
|
||||||
{
|
{
|
||||||
int rv;
|
int rv;
|
||||||
uint8_t cause_value;
|
uint8_t cause_value = OGS_GTP2_CAUSE_UNDEFINED_VALUE;
|
||||||
|
uint8_t session_cause = OGS_GTP2_CAUSE_UNDEFINED_VALUE;
|
||||||
|
|
||||||
sgwc_ue_t *sgwc_ue = NULL;
|
sgwc_ue_t *sgwc_ue = NULL;
|
||||||
|
|
||||||
|
@ -443,6 +462,15 @@ void sgwc_s5c_handle_delete_session_response(
|
||||||
rv = ogs_gtp_xact_commit(s5c_xact);
|
rv = ogs_gtp_xact_commit(s5c_xact);
|
||||||
ogs_expect(rv == OGS_OK);
|
ogs_expect(rv == OGS_OK);
|
||||||
|
|
||||||
|
/************************
|
||||||
|
* Getting Cause Value
|
||||||
|
************************/
|
||||||
|
if (rsp->cause.presence && rsp->cause.data) {
|
||||||
|
ogs_gtp2_cause_t *cause = rsp->cause.data;
|
||||||
|
ogs_assert(cause);
|
||||||
|
session_cause = cause->value;
|
||||||
|
}
|
||||||
|
|
||||||
/************************
|
/************************
|
||||||
* Check Session Context
|
* Check Session Context
|
||||||
*
|
*
|
||||||
|
@ -451,7 +479,7 @@ void sgwc_s5c_handle_delete_session_response(
|
||||||
cause_value = OGS_GTP2_CAUSE_REQUEST_ACCEPTED;
|
cause_value = OGS_GTP2_CAUSE_REQUEST_ACCEPTED;
|
||||||
|
|
||||||
if (!sess) {
|
if (!sess) {
|
||||||
ogs_error("No Context in TEID");
|
ogs_error("No Context in TEID [Cause:%d]", session_cause);
|
||||||
cause_value = OGS_GTP2_CAUSE_CONTEXT_NOT_FOUND;
|
cause_value = OGS_GTP2_CAUSE_CONTEXT_NOT_FOUND;
|
||||||
} else {
|
} else {
|
||||||
sgwc_ue = sess->sgwc_ue;
|
sgwc_ue = sess->sgwc_ue;
|
||||||
|
@ -470,18 +498,13 @@ void sgwc_s5c_handle_delete_session_response(
|
||||||
********************/
|
********************/
|
||||||
ogs_assert(cause_value == OGS_GTP2_CAUSE_REQUEST_ACCEPTED);
|
ogs_assert(cause_value == OGS_GTP2_CAUSE_REQUEST_ACCEPTED);
|
||||||
|
|
||||||
if (rsp->cause.presence) {
|
if (rsp->cause.presence == 0) {
|
||||||
ogs_gtp2_cause_t *cause = rsp->cause.data;
|
ogs_error("No Cause [VALUE:%d]", session_cause);
|
||||||
ogs_assert(cause);
|
|
||||||
|
|
||||||
cause_value = cause->value;
|
|
||||||
} else {
|
|
||||||
ogs_error("No Cause");
|
|
||||||
cause_value = OGS_GTP2_CAUSE_MANDATORY_IE_MISSING;
|
cause_value = OGS_GTP2_CAUSE_MANDATORY_IE_MISSING;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (cause_value != OGS_GTP2_CAUSE_REQUEST_ACCEPTED) {
|
if (session_cause != OGS_GTP2_CAUSE_REQUEST_ACCEPTED) {
|
||||||
ogs_error("GTP Cause [Value:%d] - Ignored", cause_value);
|
ogs_error("GTP Cause [VALUE:%d] - Ignored", session_cause);
|
||||||
}
|
}
|
||||||
|
|
||||||
/********************
|
/********************
|
||||||
|
|
Loading…
Reference in New Issue