diff --git a/lib/gtp/message.c b/lib/gtp/message.c index 8aa324e1ed..6440b94a94 100644 --- a/lib/gtp/message.c +++ b/lib/gtp/message.c @@ -20,7 +20,7 @@ /******************************************************************************* * This file had been created by gtp-tlv.py script v0.1.0 * Please do not modify this file but regenerate it via script. - * Created on: 2019-09-26 22:10:18.839117 by acetcom + * Created on: 2019-11-30 15:13:18.975101 by acetcom * from 29274-d80.docx ******************************************************************************/ @@ -2916,134 +2916,133 @@ int ogs_gtp_parse_msg(ogs_gtp_message_t *gtp_message, ogs_pkbuf_t *pkbuf) return rv; } -int ogs_gtp_build_msg(ogs_pkbuf_t **pkbuf, ogs_gtp_message_t *gtp_message) +ogs_pkbuf_t *ogs_gtp_build_msg(ogs_gtp_message_t *gtp_message) { - int rv = OGS_ERROR; + ogs_pkbuf_t *pkbuf = NULL; ogs_assert(gtp_message); - switch(gtp_message->h.type) - { - case OGS_GTP_ECHO_REQUEST_TYPE: - rv = ogs_tlv_build_msg(pkbuf, &ogs_tlv_desc_echo_request, - >p_message->echo_request, OGS_TLV_MODE_T1_L2_I1); - break; - case OGS_GTP_ECHO_RESPONSE_TYPE: - rv = ogs_tlv_build_msg(pkbuf, &ogs_tlv_desc_echo_response, - >p_message->echo_response, OGS_TLV_MODE_T1_L2_I1); - break; - case OGS_GTP_CREATE_SESSION_REQUEST_TYPE: - rv = ogs_tlv_build_msg(pkbuf, &ogs_tlv_desc_create_session_request, - >p_message->create_session_request, OGS_TLV_MODE_T1_L2_I1); - break; - case OGS_GTP_CREATE_SESSION_RESPONSE_TYPE: - rv = ogs_tlv_build_msg(pkbuf, &ogs_tlv_desc_create_session_response, - >p_message->create_session_response, OGS_TLV_MODE_T1_L2_I1); - break; - case OGS_GTP_MODIFY_BEARER_REQUEST_TYPE: - rv = ogs_tlv_build_msg(pkbuf, &ogs_tlv_desc_modify_bearer_request, - >p_message->modify_bearer_request, OGS_TLV_MODE_T1_L2_I1); - break; - case OGS_GTP_MODIFY_BEARER_RESPONSE_TYPE: - rv = ogs_tlv_build_msg(pkbuf, &ogs_tlv_desc_modify_bearer_response, - >p_message->modify_bearer_response, OGS_TLV_MODE_T1_L2_I1); - break; - case OGS_GTP_DELETE_SESSION_REQUEST_TYPE: - rv = ogs_tlv_build_msg(pkbuf, &ogs_tlv_desc_delete_session_request, - >p_message->delete_session_request, OGS_TLV_MODE_T1_L2_I1); - break; - case OGS_GTP_DELETE_SESSION_RESPONSE_TYPE: - rv = ogs_tlv_build_msg(pkbuf, &ogs_tlv_desc_delete_session_response, - >p_message->delete_session_response, OGS_TLV_MODE_T1_L2_I1); - break; - case OGS_GTP_MODIFY_BEARER_COMMAND_TYPE: - rv = ogs_tlv_build_msg(pkbuf, &ogs_tlv_desc_modify_bearer_command, - >p_message->modify_bearer_command, OGS_TLV_MODE_T1_L2_I1); - break; - case OGS_GTP_MODIFY_BEARER_FAILURE_INDICATION_TYPE: - rv = ogs_tlv_build_msg(pkbuf, &ogs_tlv_desc_modify_bearer_failure_indication, - >p_message->modify_bearer_failure_indication, OGS_TLV_MODE_T1_L2_I1); - break; - case OGS_GTP_DELETE_BEARER_COMMAND_TYPE: - rv = ogs_tlv_build_msg(pkbuf, &ogs_tlv_desc_delete_bearer_command, - >p_message->delete_bearer_command, OGS_TLV_MODE_T1_L2_I1); - break; - case OGS_GTP_DELETE_BEARER_FAILURE_INDICATION_TYPE: - rv = ogs_tlv_build_msg(pkbuf, &ogs_tlv_desc_delete_bearer_failure_indication, - >p_message->delete_bearer_failure_indication, OGS_TLV_MODE_T1_L2_I1); - break; - case OGS_GTP_DOWNLINK_DATA_NOTIFICATION_FAILURE_INDICATION_TYPE: - rv = ogs_tlv_build_msg(pkbuf, &ogs_tlv_desc_downlink_data_notification_failure_indication, - >p_message->downlink_data_notification_failure_indication, OGS_TLV_MODE_T1_L2_I1); - break; - case OGS_GTP_CREATE_BEARER_REQUEST_TYPE: - rv = ogs_tlv_build_msg(pkbuf, &ogs_tlv_desc_create_bearer_request, - >p_message->create_bearer_request, OGS_TLV_MODE_T1_L2_I1); - break; - case OGS_GTP_CREATE_BEARER_RESPONSE_TYPE: - rv = ogs_tlv_build_msg(pkbuf, &ogs_tlv_desc_create_bearer_response, - >p_message->create_bearer_response, OGS_TLV_MODE_T1_L2_I1); - break; - case OGS_GTP_UPDATE_BEARER_REQUEST_TYPE: - rv = ogs_tlv_build_msg(pkbuf, &ogs_tlv_desc_update_bearer_request, - >p_message->update_bearer_request, OGS_TLV_MODE_T1_L2_I1); - break; - case OGS_GTP_UPDATE_BEARER_RESPONSE_TYPE: - rv = ogs_tlv_build_msg(pkbuf, &ogs_tlv_desc_update_bearer_response, - >p_message->update_bearer_response, OGS_TLV_MODE_T1_L2_I1); - break; - case OGS_GTP_DELETE_BEARER_REQUEST_TYPE: - rv = ogs_tlv_build_msg(pkbuf, &ogs_tlv_desc_delete_bearer_request, - >p_message->delete_bearer_request, OGS_TLV_MODE_T1_L2_I1); - break; - case OGS_GTP_DELETE_BEARER_RESPONSE_TYPE: - rv = ogs_tlv_build_msg(pkbuf, &ogs_tlv_desc_delete_bearer_response, - >p_message->delete_bearer_response, OGS_TLV_MODE_T1_L2_I1); - break; - case OGS_GTP_CREATE_INDIRECT_DATA_FORWARDING_TUNNEL_REQUEST_TYPE: - rv = ogs_tlv_build_msg(pkbuf, &ogs_tlv_desc_create_indirect_data_forwarding_tunnel_request, - >p_message->create_indirect_data_forwarding_tunnel_request, OGS_TLV_MODE_T1_L2_I1); - break; - case OGS_GTP_CREATE_INDIRECT_DATA_FORWARDING_TUNNEL_RESPONSE_TYPE: - rv = ogs_tlv_build_msg(pkbuf, &ogs_tlv_desc_create_indirect_data_forwarding_tunnel_response, - >p_message->create_indirect_data_forwarding_tunnel_response, OGS_TLV_MODE_T1_L2_I1); - break; - case OGS_GTP_DELETE_INDIRECT_DATA_FORWARDING_TUNNEL_REQUEST_TYPE: - rv = ogs_tlv_build_msg(pkbuf, &ogs_tlv_desc_delete_indirect_data_forwarding_tunnel_request, - >p_message->delete_indirect_data_forwarding_tunnel_request, OGS_TLV_MODE_T1_L2_I1); - break; - case OGS_GTP_DELETE_INDIRECT_DATA_FORWARDING_TUNNEL_RESPONSE_TYPE: - rv = ogs_tlv_build_msg(pkbuf, &ogs_tlv_desc_delete_indirect_data_forwarding_tunnel_response, - >p_message->delete_indirect_data_forwarding_tunnel_response, OGS_TLV_MODE_T1_L2_I1); - break; - case OGS_GTP_RELEASE_ACCESS_BEARERS_REQUEST_TYPE: - rv = ogs_tlv_build_msg(pkbuf, &ogs_tlv_desc_release_access_bearers_request, - >p_message->release_access_bearers_request, OGS_TLV_MODE_T1_L2_I1); - break; - case OGS_GTP_RELEASE_ACCESS_BEARERS_RESPONSE_TYPE: - rv = ogs_tlv_build_msg(pkbuf, &ogs_tlv_desc_release_access_bearers_response, - >p_message->release_access_bearers_response, OGS_TLV_MODE_T1_L2_I1); - break; - case OGS_GTP_DOWNLINK_DATA_NOTIFICATION_TYPE: - rv = ogs_tlv_build_msg(pkbuf, &ogs_tlv_desc_downlink_data_notification, - >p_message->downlink_data_notification, OGS_TLV_MODE_T1_L2_I1); - break; - case OGS_GTP_DOWNLINK_DATA_NOTIFICATION_ACKNOWLEDGE_TYPE: - rv = ogs_tlv_build_msg(pkbuf, &ogs_tlv_desc_downlink_data_notification_acknowledge, - >p_message->downlink_data_notification_acknowledge, OGS_TLV_MODE_T1_L2_I1); - break; - case OGS_GTP_MODIFY_ACCESS_BEARERS_REQUEST_TYPE: - rv = ogs_tlv_build_msg(pkbuf, &ogs_tlv_desc_modify_access_bearers_request, - >p_message->modify_access_bearers_request, OGS_TLV_MODE_T1_L2_I1); - break; - case OGS_GTP_MODIFY_ACCESS_BEARERS_RESPONSE_TYPE: - rv = ogs_tlv_build_msg(pkbuf, &ogs_tlv_desc_modify_access_bearers_response, - >p_message->modify_access_bearers_response, OGS_TLV_MODE_T1_L2_I1); - break; - default: - ogs_warn("Not implmeneted(type:%d)", gtp_message->h.type); - break; + switch(gtp_message->h.type) { + case OGS_GTP_ECHO_REQUEST_TYPE: + pkbuf = ogs_tlv_build_msg(&ogs_tlv_desc_echo_request, + >p_message->echo_request, OGS_TLV_MODE_T1_L2_I1); + break; + case OGS_GTP_ECHO_RESPONSE_TYPE: + pkbuf = ogs_tlv_build_msg(&ogs_tlv_desc_echo_response, + >p_message->echo_response, OGS_TLV_MODE_T1_L2_I1); + break; + case OGS_GTP_CREATE_SESSION_REQUEST_TYPE: + pkbuf = ogs_tlv_build_msg(&ogs_tlv_desc_create_session_request, + >p_message->create_session_request, OGS_TLV_MODE_T1_L2_I1); + break; + case OGS_GTP_CREATE_SESSION_RESPONSE_TYPE: + pkbuf = ogs_tlv_build_msg(&ogs_tlv_desc_create_session_response, + >p_message->create_session_response, OGS_TLV_MODE_T1_L2_I1); + break; + case OGS_GTP_MODIFY_BEARER_REQUEST_TYPE: + pkbuf = ogs_tlv_build_msg(&ogs_tlv_desc_modify_bearer_request, + >p_message->modify_bearer_request, OGS_TLV_MODE_T1_L2_I1); + break; + case OGS_GTP_MODIFY_BEARER_RESPONSE_TYPE: + pkbuf = ogs_tlv_build_msg(&ogs_tlv_desc_modify_bearer_response, + >p_message->modify_bearer_response, OGS_TLV_MODE_T1_L2_I1); + break; + case OGS_GTP_DELETE_SESSION_REQUEST_TYPE: + pkbuf = ogs_tlv_build_msg(&ogs_tlv_desc_delete_session_request, + >p_message->delete_session_request, OGS_TLV_MODE_T1_L2_I1); + break; + case OGS_GTP_DELETE_SESSION_RESPONSE_TYPE: + pkbuf = ogs_tlv_build_msg(&ogs_tlv_desc_delete_session_response, + >p_message->delete_session_response, OGS_TLV_MODE_T1_L2_I1); + break; + case OGS_GTP_MODIFY_BEARER_COMMAND_TYPE: + pkbuf = ogs_tlv_build_msg(&ogs_tlv_desc_modify_bearer_command, + >p_message->modify_bearer_command, OGS_TLV_MODE_T1_L2_I1); + break; + case OGS_GTP_MODIFY_BEARER_FAILURE_INDICATION_TYPE: + pkbuf = ogs_tlv_build_msg(&ogs_tlv_desc_modify_bearer_failure_indication, + >p_message->modify_bearer_failure_indication, OGS_TLV_MODE_T1_L2_I1); + break; + case OGS_GTP_DELETE_BEARER_COMMAND_TYPE: + pkbuf = ogs_tlv_build_msg(&ogs_tlv_desc_delete_bearer_command, + >p_message->delete_bearer_command, OGS_TLV_MODE_T1_L2_I1); + break; + case OGS_GTP_DELETE_BEARER_FAILURE_INDICATION_TYPE: + pkbuf = ogs_tlv_build_msg(&ogs_tlv_desc_delete_bearer_failure_indication, + >p_message->delete_bearer_failure_indication, OGS_TLV_MODE_T1_L2_I1); + break; + case OGS_GTP_DOWNLINK_DATA_NOTIFICATION_FAILURE_INDICATION_TYPE: + pkbuf = ogs_tlv_build_msg(&ogs_tlv_desc_downlink_data_notification_failure_indication, + >p_message->downlink_data_notification_failure_indication, OGS_TLV_MODE_T1_L2_I1); + break; + case OGS_GTP_CREATE_BEARER_REQUEST_TYPE: + pkbuf = ogs_tlv_build_msg(&ogs_tlv_desc_create_bearer_request, + >p_message->create_bearer_request, OGS_TLV_MODE_T1_L2_I1); + break; + case OGS_GTP_CREATE_BEARER_RESPONSE_TYPE: + pkbuf = ogs_tlv_build_msg(&ogs_tlv_desc_create_bearer_response, + >p_message->create_bearer_response, OGS_TLV_MODE_T1_L2_I1); + break; + case OGS_GTP_UPDATE_BEARER_REQUEST_TYPE: + pkbuf = ogs_tlv_build_msg(&ogs_tlv_desc_update_bearer_request, + >p_message->update_bearer_request, OGS_TLV_MODE_T1_L2_I1); + break; + case OGS_GTP_UPDATE_BEARER_RESPONSE_TYPE: + pkbuf = ogs_tlv_build_msg(&ogs_tlv_desc_update_bearer_response, + >p_message->update_bearer_response, OGS_TLV_MODE_T1_L2_I1); + break; + case OGS_GTP_DELETE_BEARER_REQUEST_TYPE: + pkbuf = ogs_tlv_build_msg(&ogs_tlv_desc_delete_bearer_request, + >p_message->delete_bearer_request, OGS_TLV_MODE_T1_L2_I1); + break; + case OGS_GTP_DELETE_BEARER_RESPONSE_TYPE: + pkbuf = ogs_tlv_build_msg(&ogs_tlv_desc_delete_bearer_response, + >p_message->delete_bearer_response, OGS_TLV_MODE_T1_L2_I1); + break; + case OGS_GTP_CREATE_INDIRECT_DATA_FORWARDING_TUNNEL_REQUEST_TYPE: + pkbuf = ogs_tlv_build_msg(&ogs_tlv_desc_create_indirect_data_forwarding_tunnel_request, + >p_message->create_indirect_data_forwarding_tunnel_request, OGS_TLV_MODE_T1_L2_I1); + break; + case OGS_GTP_CREATE_INDIRECT_DATA_FORWARDING_TUNNEL_RESPONSE_TYPE: + pkbuf = ogs_tlv_build_msg(&ogs_tlv_desc_create_indirect_data_forwarding_tunnel_response, + >p_message->create_indirect_data_forwarding_tunnel_response, OGS_TLV_MODE_T1_L2_I1); + break; + case OGS_GTP_DELETE_INDIRECT_DATA_FORWARDING_TUNNEL_REQUEST_TYPE: + pkbuf = ogs_tlv_build_msg(&ogs_tlv_desc_delete_indirect_data_forwarding_tunnel_request, + >p_message->delete_indirect_data_forwarding_tunnel_request, OGS_TLV_MODE_T1_L2_I1); + break; + case OGS_GTP_DELETE_INDIRECT_DATA_FORWARDING_TUNNEL_RESPONSE_TYPE: + pkbuf = ogs_tlv_build_msg(&ogs_tlv_desc_delete_indirect_data_forwarding_tunnel_response, + >p_message->delete_indirect_data_forwarding_tunnel_response, OGS_TLV_MODE_T1_L2_I1); + break; + case OGS_GTP_RELEASE_ACCESS_BEARERS_REQUEST_TYPE: + pkbuf = ogs_tlv_build_msg(&ogs_tlv_desc_release_access_bearers_request, + >p_message->release_access_bearers_request, OGS_TLV_MODE_T1_L2_I1); + break; + case OGS_GTP_RELEASE_ACCESS_BEARERS_RESPONSE_TYPE: + pkbuf = ogs_tlv_build_msg(&ogs_tlv_desc_release_access_bearers_response, + >p_message->release_access_bearers_response, OGS_TLV_MODE_T1_L2_I1); + break; + case OGS_GTP_DOWNLINK_DATA_NOTIFICATION_TYPE: + pkbuf = ogs_tlv_build_msg(&ogs_tlv_desc_downlink_data_notification, + >p_message->downlink_data_notification, OGS_TLV_MODE_T1_L2_I1); + break; + case OGS_GTP_DOWNLINK_DATA_NOTIFICATION_ACKNOWLEDGE_TYPE: + pkbuf = ogs_tlv_build_msg(&ogs_tlv_desc_downlink_data_notification_acknowledge, + >p_message->downlink_data_notification_acknowledge, OGS_TLV_MODE_T1_L2_I1); + break; + case OGS_GTP_MODIFY_ACCESS_BEARERS_REQUEST_TYPE: + pkbuf = ogs_tlv_build_msg(&ogs_tlv_desc_modify_access_bearers_request, + >p_message->modify_access_bearers_request, OGS_TLV_MODE_T1_L2_I1); + break; + case OGS_GTP_MODIFY_ACCESS_BEARERS_RESPONSE_TYPE: + pkbuf = ogs_tlv_build_msg(&ogs_tlv_desc_modify_access_bearers_response, + >p_message->modify_access_bearers_response, OGS_TLV_MODE_T1_L2_I1); + break; + default: + ogs_warn("Not implmeneted(type:%d)", gtp_message->h.type); + break; } - return rv; + return pkbuf; } diff --git a/lib/gtp/message.h b/lib/gtp/message.h index 0d8881cdf6..09fa681e1b 100644 --- a/lib/gtp/message.h +++ b/lib/gtp/message.h @@ -20,7 +20,7 @@ /******************************************************************************* * This file had been created by gtp-tlv.py script v0.1.0 * Please do not modify this file but regenerate it via script. - * Created on: 2019-09-26 22:10:18.823195 by acetcom + * Created on: 2019-11-30 15:13:18.956844 by acetcom * from 29274-d80.docx ******************************************************************************/ @@ -1169,7 +1169,7 @@ typedef struct ogs_gtp_message_s { } ogs_gtp_message_t; int ogs_gtp_parse_msg(ogs_gtp_message_t *gtp_message, ogs_pkbuf_t *pkbuf); -int ogs_gtp_build_msg(ogs_pkbuf_t **pkbuf, ogs_gtp_message_t *gtp_message); +ogs_pkbuf_t *ogs_gtp_build_msg(ogs_gtp_message_t *gtp_message); #ifdef __cplusplus } diff --git a/lib/gtp/path.c b/lib/gtp/path.c index e4895e4ded..eb7fc56cd6 100644 --- a/lib/gtp/path.c +++ b/lib/gtp/path.c @@ -273,13 +273,13 @@ void ogs_gtp_send_error_message( tlv->len = sizeof(cause); tlv->data = &cause; - rv = ogs_gtp_build_msg(&pkbuf, &errmsg); - ogs_assert(rv == OGS_OK); + pkbuf = ogs_gtp_build_msg(&errmsg); + ogs_expect_or_return(pkbuf); rv = ogs_gtp_xact_update_tx(xact, &errmsg.h, pkbuf); - ogs_assert(rv == OGS_OK); + ogs_expect_or_return(rv == OGS_OK); rv = ogs_gtp_xact_commit(xact); - ogs_assert(rv == OGS_OK); + ogs_expect(rv == OGS_OK); } diff --git a/lib/gtp/support/gtp-tlv.py b/lib/gtp/support/gtp-tlv.py index 2198848128..af1d6f56bd 100644 --- a/lib/gtp/support/gtp-tlv.py +++ b/lib/gtp/support/gtp-tlv.py @@ -523,7 +523,7 @@ f.write(" };\n"); f.write("} ogs_gtp_message_t;\n\n") f.write("""int ogs_gtp_parse_msg(ogs_gtp_message_t *gtp_message, ogs_pkbuf_t *pkbuf); -int ogs_gtp_build_msg(ogs_pkbuf_t **pkbuf, ogs_gtp_message_t *gtp_message); +ogs_pkbuf_t *ogs_gtp_build_msg(ogs_gtp_message_t *gtp_message); #ifdef __cplusplus } @@ -647,26 +647,25 @@ f.write(""" default: """) -f.write("""int ogs_gtp_build_msg(ogs_pkbuf_t **pkbuf, ogs_gtp_message_t *gtp_message) +f.write("""ogs_pkbuf_t *ogs_gtp_build_msg(ogs_gtp_message_t *gtp_message) { - int rv = OGS_ERROR; + ogs_pkbuf_t *pkbuf = NULL; ogs_assert(gtp_message); - switch(gtp_message->h.type) - { + switch(gtp_message->h.type) { """) for (k, v) in sorted_msg_list: if "ies" in msg_list[k]: - f.write(" case OGS_GTP_%s_TYPE:\n" % v_upper(k)) - f.write(" rv = ogs_tlv_build_msg(pkbuf, &ogs_tlv_desc_%s,\n" % v_lower(k)) - f.write(" >p_message->%s, OGS_TLV_MODE_T1_L2_I1);\n" % v_lower(k)) - f.write(" break;\n") -f.write(""" default: - ogs_warn("Not implmeneted(type:%d)", gtp_message->h.type); - break; + f.write(" case OGS_GTP_%s_TYPE:\n" % v_upper(k)) + f.write(" pkbuf = ogs_tlv_build_msg(&ogs_tlv_desc_%s,\n" % v_lower(k)) + f.write(" >p_message->%s, OGS_TLV_MODE_T1_L2_I1);\n" % v_lower(k)) + f.write(" break;\n") +f.write(""" default: + ogs_warn("Not implmeneted(type:%d)", gtp_message->h.type); + break; } - return rv; + return pkbuf; } """) diff --git a/lib/gtp/tlv.c b/lib/gtp/tlv.c index 65a70962c9..3a55e9f2e2 100644 --- a/lib/gtp/tlv.c +++ b/lib/gtp/tlv.c @@ -253,13 +253,12 @@ static uint32_t tlv_add_compound(ogs_tlv_t **root, ogs_tlv_t *parent_tlv, return count; } -int ogs_tlv_build_msg(ogs_pkbuf_t **pkbuf, ogs_tlv_desc_t *desc, void *msg, - int mode) +ogs_pkbuf_t *ogs_tlv_build_msg(ogs_tlv_desc_t *desc, void *msg, int mode) { ogs_tlv_t *root = NULL; uint32_t r, length, rendlen; + ogs_pkbuf_t *pkbuf = NULL; - ogs_assert(pkbuf); ogs_assert(desc); ogs_assert(msg); @@ -270,17 +269,17 @@ int ogs_tlv_build_msg(ogs_pkbuf_t **pkbuf, ogs_tlv_desc_t *desc, void *msg, ogs_assert(r > 0 && root); length = ogs_tlv_calc_length(root, mode); - *pkbuf = ogs_pkbuf_alloc(NULL, OGS_TLV_MAX_HEADROOM+length); - ogs_assert(*pkbuf); - ogs_pkbuf_reserve(*pkbuf, OGS_TLV_MAX_HEADROOM); - ogs_pkbuf_put(*pkbuf, length); + pkbuf = ogs_pkbuf_alloc(NULL, OGS_TLV_MAX_HEADROOM+length); + ogs_assert(pkbuf); + ogs_pkbuf_reserve(pkbuf, OGS_TLV_MAX_HEADROOM); + ogs_pkbuf_put(pkbuf, length); - rendlen = ogs_tlv_render(root, (*pkbuf)->data, length, mode); + rendlen = ogs_tlv_render(root, pkbuf->data, length, mode); ogs_assert(rendlen == length); ogs_tlv_free_all(root); - return OGS_OK; + return pkbuf; } static ogs_tlv_desc_t* tlv_find_desc(uint8_t *desc_index, diff --git a/lib/gtp/tlv.h b/lib/gtp/tlv.h index f017d499b2..469c54f4cc 100644 --- a/lib/gtp/tlv.h +++ b/lib/gtp/tlv.h @@ -155,11 +155,9 @@ typedef struct ogs_tlv_null_s { ogs_tlv_presence_t presence; } ogs_tlv_null_t; -int ogs_tlv_build_msg(ogs_pkbuf_t **pkbuf, ogs_tlv_desc_t *desc, void *msg, - int mode); - -int ogs_tlv_parse_msg(void *msg, ogs_tlv_desc_t *desc, ogs_pkbuf_t *pkbuf, - int mode); +ogs_pkbuf_t *ogs_tlv_build_msg(ogs_tlv_desc_t *desc, void *msg, int mode); +int ogs_tlv_parse_msg( + void *msg, ogs_tlv_desc_t *desc, ogs_pkbuf_t *pkbuf, int mode); #ifdef __cplusplus } diff --git a/lib/gtp/xact.c b/lib/gtp/xact.c index 184ace54cc..244f3b4960 100644 --- a/lib/gtp/xact.c +++ b/lib/gtp/xact.c @@ -105,7 +105,11 @@ ogs_gtp_xact_t *ogs_gtp_xact_local_create(ogs_gtp_node_t *gnode, &xact->gnode->local_list : &xact->gnode->remote_list, xact); rv = ogs_gtp_xact_update_tx(xact, hdesc, pkbuf); - ogs_assert(rv == OGS_OK); + if (rv != OGS_OK) { + ogs_error("ogs_gtp_xact_update_tx() failed"); + ogs_gtp_xact_delete(xact); + return NULL; + } ogs_debug("[%d] %s Create peer [%s]:%d", xact->xid, @@ -185,15 +189,24 @@ int ogs_gtp_xact_update_tx(ogs_gtp_xact_t *xact, if (xact->org == OGS_GTP_LOCAL_ORIGINATOR) { switch (stage) { case GTP_XACT_INITIAL_STAGE: - ogs_assert(xact->step == 0); + if (xact->step != 0) { + ogs_error("invalid step[%d]", xact->step); + ogs_pkbuf_free(pkbuf); + return OGS_ERROR; + } break; case GTP_XACT_INTERMEDIATE_STAGE: - ogs_assert_if_reached(); - break; + ogs_expect(0); + ogs_pkbuf_free(pkbuf); + return OGS_ERROR; case GTP_XACT_FINAL_STAGE: - ogs_assert(xact->step == 2); + if (xact->step != 2) { + ogs_error("invalid step[%d]", xact->step); + ogs_pkbuf_free(pkbuf); + return OGS_ERROR; + } break; default: @@ -203,20 +216,29 @@ int ogs_gtp_xact_update_tx(ogs_gtp_xact_t *xact, } else if (xact->org == OGS_GTP_REMOTE_ORIGINATOR) { switch (stage) { case GTP_XACT_INITIAL_STAGE: - ogs_assert_if_reached(); - break; + ogs_expect(0); + ogs_pkbuf_free(pkbuf); + return OGS_ERROR; case GTP_XACT_INTERMEDIATE_STAGE: case GTP_XACT_FINAL_STAGE: - ogs_assert(xact->step == 1); + if (xact->step != 1) { + ogs_error("invalid step[%d]", xact->step); + ogs_pkbuf_free(pkbuf); + return OGS_ERROR; + } break; default: - ogs_assert_if_reached(); - break; + ogs_error("invalid stage[%d]", stage); + ogs_pkbuf_free(pkbuf); + return OGS_ERROR; } - } else - ogs_assert_if_reached(); + } else { + ogs_error("invalid org[%d]", xact->org); + ogs_pkbuf_free(pkbuf); + return OGS_ERROR; + } ogs_pkbuf_push(pkbuf, OGS_GTPV2C_HEADER_LEN); h = (ogs_gtp_header_t *)pkbuf->data; @@ -257,14 +279,18 @@ int ogs_gtp_xact_update_rx(ogs_gtp_xact_t *xact, uint8_t type) if (xact->org == OGS_GTP_LOCAL_ORIGINATOR) { switch (stage) { case GTP_XACT_INITIAL_STAGE: - ogs_assert_if_reached(); - break; + ogs_expect(0); + return OGS_ERROR; case GTP_XACT_INTERMEDIATE_STAGE: if (xact->seq[1].type == type) { ogs_pkbuf_t *pkbuf = NULL; - ogs_assert(xact->step == 2 || xact->step == 3); + if (xact->step != 2 && xact->step != 3) { + ogs_error("invalid step[%d]", xact->step); + ogs_pkbuf_free(pkbuf); + return OGS_ERROR; + } pkbuf = xact->seq[2].pkbuf; if (pkbuf) { @@ -282,7 +308,7 @@ int ogs_gtp_xact_update_rx(ogs_gtp_xact_t *xact, uint8_t type) buf), OGS_PORT(&xact->gnode->remote_addr)); rv = ogs_gtp_sendto(xact->gnode, pkbuf); - ogs_assert(rv == OGS_OK); + ogs_expect(rv == OGS_OK); } else { ogs_warn("[%d] %s Request Duplicated. Discard!" " for step %d type %d peer [%s]:%d", @@ -298,7 +324,10 @@ int ogs_gtp_xact_update_rx(ogs_gtp_xact_t *xact, uint8_t type) return OGS_RETRY; } - ogs_assert(xact->step == 1); + if (xact->step != 1) { + ogs_error("invalid step[%d]", xact->step); + return OGS_ERROR; + } if (xact->tm_holding) ogs_timer_start( @@ -307,12 +336,15 @@ int ogs_gtp_xact_update_rx(ogs_gtp_xact_t *xact, uint8_t type) break; case GTP_XACT_FINAL_STAGE: - ogs_assert(xact->step == 1); + if (xact->step != 1) { + ogs_error("invalid step[%d]", xact->step); + return OGS_ERROR; + } break; default: - ogs_assert_if_reached(); - break; + ogs_error("invalid stage[%d]", stage); + return OGS_ERROR; } } else if (xact->org == OGS_GTP_REMOTE_ORIGINATOR) { switch (stage) { @@ -320,7 +352,10 @@ int ogs_gtp_xact_update_rx(ogs_gtp_xact_t *xact, uint8_t type) if (xact->seq[0].type == type) { ogs_pkbuf_t *pkbuf = NULL; - ogs_assert(xact->step == 1 || xact->step == 2); + if (xact->step != 1 && xact->step != 2) { + ogs_error("invalid step[%d]", xact->step); + return OGS_ERROR; + } pkbuf = xact->seq[1].pkbuf; if (pkbuf) { @@ -338,7 +373,7 @@ int ogs_gtp_xact_update_rx(ogs_gtp_xact_t *xact, uint8_t type) buf), OGS_PORT(&xact->gnode->remote_addr)); rv = ogs_gtp_sendto(xact->gnode, pkbuf); - ogs_assert(rv == OGS_OK); + ogs_expect(rv == OGS_OK); } else { ogs_warn("[%d] %s Request Duplicated. Discard!" " for step %d type %d peer [%s]:%d", @@ -354,7 +389,10 @@ int ogs_gtp_xact_update_rx(ogs_gtp_xact_t *xact, uint8_t type) return OGS_RETRY; } - ogs_assert(xact->step == 0); + if (xact->step != 0) { + ogs_error("invalid step[%d]", xact->step); + return OGS_ERROR; + } if (xact->tm_holding) ogs_timer_start( xact->tm_holding, GTP_T3_DUPLICATED_DURATION); @@ -362,21 +400,26 @@ int ogs_gtp_xact_update_rx(ogs_gtp_xact_t *xact, uint8_t type) break; case GTP_XACT_INTERMEDIATE_STAGE: - ogs_assert_if_reached(); - break; + ogs_expect(0); + return OGS_ERROR; case GTP_XACT_FINAL_STAGE: - ogs_assert(xact->step == 2); + if (xact->step != 2) { + ogs_error("invalid step[%d]", xact->step); + return OGS_ERROR; + } /* continue */ break; default: - ogs_assert_if_reached(); - break; + ogs_error("invalid stage[%d]", stage); + return OGS_ERROR; } - } else - ogs_assert_if_reached(); + } else { + ogs_error("invalid org[%d]", xact->org); + return OGS_ERROR; + } if (xact->tm_response) ogs_timer_stop(xact->tm_response); @@ -415,20 +458,28 @@ int ogs_gtp_xact_commit(ogs_gtp_xact_t *xact) if (xact->org == OGS_GTP_LOCAL_ORIGINATOR) { switch (stage) { case GTP_XACT_INITIAL_STAGE: - ogs_assert(xact->step == 1); + if (xact->step != 1) { + ogs_error("invalid step[%d]", xact->step); + ogs_gtp_xact_delete(xact); + return OGS_ERROR; + } if (xact->tm_response) - ogs_timer_start( - xact->tm_response, GTP_T3_RESPONSE_DURATION); + ogs_timer_start(xact->tm_response, GTP_T3_RESPONSE_DURATION); break; case GTP_XACT_INTERMEDIATE_STAGE: - ogs_assert_if_reached(); - break; + ogs_expect(0); + ogs_gtp_xact_delete(xact); + return OGS_ERROR; case GTP_XACT_FINAL_STAGE: - ogs_assert(xact->step == 2 || xact->step == 3); + if (xact->step != 2 && xact->step != 3) { + ogs_error("invalid step[%d]", xact->step); + ogs_gtp_xact_delete(xact); + return OGS_ERROR; + } if (xact->step == 2) { ogs_gtp_xact_delete(xact); return OGS_OK; @@ -437,17 +488,23 @@ int ogs_gtp_xact_commit(ogs_gtp_xact_t *xact) break; default: - ogs_assert_if_reached(); - break; + ogs_error("invalid stage[%d]", stage); + ogs_gtp_xact_delete(xact); + return OGS_ERROR; } } else if (xact->org == OGS_GTP_REMOTE_ORIGINATOR) { switch (stage) { case GTP_XACT_INITIAL_STAGE: - ogs_assert_if_reached(); - break; + ogs_expect(0); + ogs_gtp_xact_delete(xact); + return OGS_ERROR; case GTP_XACT_INTERMEDIATE_STAGE: - ogs_assert(xact->step == 2); + if (xact->step != 2) { + ogs_error("invalid step[%d]", xact->step); + ogs_gtp_xact_delete(xact); + return OGS_ERROR; + } if (xact->tm_response) ogs_timer_start( xact->tm_response, GTP_T3_RESPONSE_DURATION); @@ -455,7 +512,11 @@ int ogs_gtp_xact_commit(ogs_gtp_xact_t *xact) break; case GTP_XACT_FINAL_STAGE: - ogs_assert(xact->step == 2 || xact->step == 3); + if (xact->step != 2 && xact->step != 3) { + ogs_error("invalid step[%d]", xact->step); + ogs_gtp_xact_delete(xact); + return OGS_ERROR; + } if (xact->step == 3) { ogs_gtp_xact_delete(xact); return OGS_OK; @@ -464,17 +525,21 @@ int ogs_gtp_xact_commit(ogs_gtp_xact_t *xact) break; default: - ogs_assert_if_reached(); - break; + ogs_error("invalid stage[%d]", stage); + ogs_gtp_xact_delete(xact); + return OGS_ERROR; } - } else - ogs_assert_if_reached(); + } else { + ogs_error("invalid org[%d]", xact->org); + ogs_gtp_xact_delete(xact); + return OGS_ERROR; + } pkbuf = xact->seq[xact->step-1].pkbuf; ogs_assert(pkbuf); rv = ogs_gtp_sendto(xact->gnode, pkbuf); - ogs_assert(rv == OGS_OK); + ogs_expect(rv == OGS_OK); return OGS_OK; } @@ -584,6 +649,8 @@ int ogs_gtp_xact_receive( rv = ogs_gtp_xact_update_rx(new, h->type); if (rv != OGS_OK) { + ogs_error("ogs_gtp_xact_update_rx() failed"); + ogs_gtp_xact_delete(new); return rv; } diff --git a/lib/nas/conv.c b/lib/nas/conv.c index d1d51c7c7b..5b029a4261 100644 --- a/lib/nas/conv.c +++ b/lib/nas/conv.c @@ -42,8 +42,9 @@ void ogs_nas_imsi_to_bcd( bcd_len = imsi_len * 2 - 1; if (!imsi->odd_even) { /* if bcd length is even */ - if (bcd[bcd_len] != 0xf) - ogs_warn("Spec warning : bcd[%d] = 0x%x", bcd_len, bcd[bcd_len]); + if (imsi->digit15 != 0xf) + ogs_warn("Spec warning : bcd[%d] = 0x%x, 0x%x", + bcd_len-1, imsi->digit15, bcd[bcd_len-1]); (bcd_len)--; } @@ -103,8 +104,10 @@ void ogs_nas_imeisv_to_bcd( bcd_len = imeisv_len * 2 - 1; if (!imeisv->odd_even) { /* if bcd length is even */ - if (bcd[bcd_len] != 0xf) - ogs_warn("Spec warning : bcd[%d] = 0x%x", bcd_len, bcd[bcd_len]); + if (imeisv->digit17 != 0xf) { + ogs_warn("Spec warning : bcd[%d] = 0x%x, 0x%x", + bcd_len-1, imeisv->digit17, bcd[bcd_len-1]); + } (bcd_len)--; } diff --git a/lib/nas/decoder.c b/lib/nas/decoder.c index bb23714b24..320cbb84b5 100644 --- a/lib/nas/decoder.c +++ b/lib/nas/decoder.c @@ -20,7 +20,7 @@ /******************************************************************************* * This file had been created by nas-message.py script v0.1.0 * Please do not modify this file but regenerate it via script. - * Created on: 2019-09-30 22:46:44.508167 by acetcom + * Created on: 2019-11-29 20:48:26.777198 by acetcom * from 24301-d80.docx ******************************************************************************/ diff --git a/lib/nas/encoder.c b/lib/nas/encoder.c index d6fcb27dec..eb485a4973 100644 --- a/lib/nas/encoder.c +++ b/lib/nas/encoder.c @@ -20,7 +20,7 @@ /******************************************************************************* * This file had been created by nas-message.py script v0.1.0 * Please do not modify this file but regenerate it via script. - * Created on: 2019-09-30 22:46:44.517916 by acetcom + * Created on: 2019-11-29 20:48:26.787333 by acetcom * from 24301-d80.docx ******************************************************************************/ @@ -3015,8 +3015,9 @@ int ogs_nas_encode_esm_status(ogs_pkbuf_t *pkbuf, ogs_nas_message_t *message) return encoded; } -int ogs_nas_emm_encode(ogs_pkbuf_t **pkbuf, ogs_nas_message_t *message) +ogs_pkbuf_t *ogs_nas_emm_encode(ogs_nas_message_t *message) { + ogs_pkbuf_t *pkbuf = NULL; int size = 0; int encoded = 0; @@ -3024,23 +3025,23 @@ int ogs_nas_emm_encode(ogs_pkbuf_t **pkbuf, ogs_nas_message_t *message) /* The Packet Buffer(ogs_pkbuf_t) for NAS message MUST make a HEADROOM. * When calculating AES_CMAC, we need to use the headroom of the packet. */ - *pkbuf = ogs_pkbuf_alloc(NULL, OGS_MAX_SDU_LEN); - ogs_assert(*pkbuf); - ogs_pkbuf_reserve(*pkbuf, OGS_NAS_HEADROOM); - ogs_pkbuf_put(*pkbuf, OGS_MAX_SDU_LEN-OGS_NAS_HEADROOM); + pkbuf = ogs_pkbuf_alloc(NULL, OGS_MAX_SDU_LEN); + ogs_assert(pkbuf); + ogs_pkbuf_reserve(pkbuf, OGS_NAS_HEADROOM); + ogs_pkbuf_put(pkbuf, OGS_MAX_SDU_LEN-OGS_NAS_HEADROOM); size = sizeof(ogs_nas_emm_header_t); - ogs_assert(ogs_pkbuf_pull(*pkbuf, size)); + ogs_assert(ogs_pkbuf_pull(pkbuf, size)); - memcpy((*pkbuf)->data - size, &message->emm.h, size); + memcpy(pkbuf->data - size, &message->emm.h, size); encoded += size; if (message->emm.h.security_header_type >= OGS_NAS_SECURITY_HEADER_FOR_SERVICE_REQUEST_MESSAGE) { - ogs_assert(ogs_pkbuf_push(*pkbuf, 1)); + ogs_assert(ogs_pkbuf_push(pkbuf, 1)); encoded -= 1; - size = ogs_nas_encode_service_request(*pkbuf, message); + size = ogs_nas_encode_service_request(pkbuf, message); ogs_assert(size >= 0); encoded += size; @@ -3050,160 +3051,161 @@ int ogs_nas_emm_encode(ogs_pkbuf_t **pkbuf, ogs_nas_message_t *message) switch(message->emm.h.message_type) { case OGS_NAS_ATTACH_REQUEST: - size = ogs_nas_encode_attach_request(*pkbuf, message); + size = ogs_nas_encode_attach_request(pkbuf, message); ogs_assert(size >= 0); encoded += size; break; case OGS_NAS_ATTACH_ACCEPT: - size = ogs_nas_encode_attach_accept(*pkbuf, message); + size = ogs_nas_encode_attach_accept(pkbuf, message); ogs_assert(size >= 0); encoded += size; break; case OGS_NAS_ATTACH_COMPLETE: - size = ogs_nas_encode_attach_complete(*pkbuf, message); + size = ogs_nas_encode_attach_complete(pkbuf, message); ogs_assert(size >= 0); encoded += size; break; case OGS_NAS_ATTACH_REJECT: - size = ogs_nas_encode_attach_reject(*pkbuf, message); + size = ogs_nas_encode_attach_reject(pkbuf, message); ogs_assert(size >= 0); encoded += size; break; case OGS_NAS_DETACH_REQUEST: - size = ogs_nas_encode_detach_request_to_ue(*pkbuf, message); + size = ogs_nas_encode_detach_request_to_ue(pkbuf, message); ogs_assert(size >= 0); encoded += size; break; case OGS_NAS_DETACH_ACCEPT: break; case OGS_NAS_TRACKING_AREA_UPDATE_REQUEST: - size = ogs_nas_encode_tracking_area_update_request(*pkbuf, message); + size = ogs_nas_encode_tracking_area_update_request(pkbuf, message); ogs_assert(size >= 0); encoded += size; break; case OGS_NAS_TRACKING_AREA_UPDATE_ACCEPT: - size = ogs_nas_encode_tracking_area_update_accept(*pkbuf, message); + size = ogs_nas_encode_tracking_area_update_accept(pkbuf, message); ogs_assert(size >= 0); encoded += size; break; case OGS_NAS_TRACKING_AREA_UPDATE_COMPLETE: break; case OGS_NAS_TRACKING_AREA_UPDATE_REJECT: - size = ogs_nas_encode_tracking_area_update_reject(*pkbuf, message); + size = ogs_nas_encode_tracking_area_update_reject(pkbuf, message); ogs_assert(size >= 0); encoded += size; break; case OGS_NAS_EXTENDED_SERVICE_REQUEST: - size = ogs_nas_encode_extended_service_request(*pkbuf, message); + size = ogs_nas_encode_extended_service_request(pkbuf, message); ogs_assert(size >= 0); encoded += size; break; case OGS_NAS_SERVICE_REJECT: - size = ogs_nas_encode_service_reject(*pkbuf, message); + size = ogs_nas_encode_service_reject(pkbuf, message); ogs_assert(size >= 0); encoded += size; break; case OGS_NAS_GUTI_REALLOCATION_COMMAND: - size = ogs_nas_encode_guti_reallocation_command(*pkbuf, message); + size = ogs_nas_encode_guti_reallocation_command(pkbuf, message); ogs_assert(size >= 0); encoded += size; break; case OGS_NAS_GUTI_REALLOCATION_COMPLETE: break; case OGS_NAS_AUTHENTICATION_REQUEST: - size = ogs_nas_encode_authentication_request(*pkbuf, message); + size = ogs_nas_encode_authentication_request(pkbuf, message); ogs_assert(size >= 0); encoded += size; break; case OGS_NAS_AUTHENTICATION_RESPONSE: - size = ogs_nas_encode_authentication_response(*pkbuf, message); + size = ogs_nas_encode_authentication_response(pkbuf, message); ogs_assert(size >= 0); encoded += size; break; case OGS_NAS_AUTHENTICATION_REJECT: break; case OGS_NAS_IDENTITY_REQUEST: - size = ogs_nas_encode_identity_request(*pkbuf, message); + size = ogs_nas_encode_identity_request(pkbuf, message); ogs_assert(size >= 0); encoded += size; break; case OGS_NAS_IDENTITY_RESPONSE: - size = ogs_nas_encode_identity_response(*pkbuf, message); + size = ogs_nas_encode_identity_response(pkbuf, message); ogs_assert(size >= 0); encoded += size; break; case OGS_NAS_AUTHENTICATION_FAILURE: - size = ogs_nas_encode_authentication_failure(*pkbuf, message); + size = ogs_nas_encode_authentication_failure(pkbuf, message); ogs_assert(size >= 0); encoded += size; break; case OGS_NAS_SECURITY_MODE_COMMAND: - size = ogs_nas_encode_security_mode_command(*pkbuf, message); + size = ogs_nas_encode_security_mode_command(pkbuf, message); ogs_assert(size >= 0); encoded += size; break; case OGS_NAS_SECURITY_MODE_COMPLETE: - size = ogs_nas_encode_security_mode_complete(*pkbuf, message); + size = ogs_nas_encode_security_mode_complete(pkbuf, message); ogs_assert(size >= 0); encoded += size; break; case OGS_NAS_SECURITY_MODE_REJECT: - size = ogs_nas_encode_security_mode_reject(*pkbuf, message); + size = ogs_nas_encode_security_mode_reject(pkbuf, message); ogs_assert(size >= 0); encoded += size; break; case OGS_NAS_EMM_STATUS: - size = ogs_nas_encode_emm_status(*pkbuf, message); + size = ogs_nas_encode_emm_status(pkbuf, message); ogs_assert(size >= 0); encoded += size; break; case OGS_NAS_EMM_INFORMATION: - size = ogs_nas_encode_emm_information(*pkbuf, message); + size = ogs_nas_encode_emm_information(pkbuf, message); ogs_assert(size >= 0); encoded += size; break; case OGS_NAS_DOWNLINK_NAS_TRANSPORT: - size = ogs_nas_encode_downlink_nas_transport(*pkbuf, message); + size = ogs_nas_encode_downlink_nas_transport(pkbuf, message); ogs_assert(size >= 0); encoded += size; break; case OGS_NAS_UPLINK_NAS_TRANSPORT: - size = ogs_nas_encode_uplink_nas_transport(*pkbuf, message); + size = ogs_nas_encode_uplink_nas_transport(pkbuf, message); ogs_assert(size >= 0); encoded += size; break; case OGS_NAS_CS_SERVICE_NOTIFICATION: - size = ogs_nas_encode_cs_service_notification(*pkbuf, message); + size = ogs_nas_encode_cs_service_notification(pkbuf, message); ogs_assert(size >= 0); encoded += size; break; case OGS_NAS_UPLINK_GENERIC_NAS_TRANSPORT: - size = ogs_nas_encode_uplink_generic_nas_transport(*pkbuf, message); + size = ogs_nas_encode_uplink_generic_nas_transport(pkbuf, message); ogs_assert(size >= 0); encoded += size; break; case OGS_NAS_DOWNLINK_GENERIC_NAS_TRANSPORT: - size = ogs_nas_encode_downlink_generic_nas_transport(*pkbuf, message); + size = ogs_nas_encode_downlink_generic_nas_transport(pkbuf, message); ogs_assert(size >= 0); encoded += size; break; default: ogs_error("Unknown message type (0x%x) or not implemented", message->emm.h.message_type); - ogs_pkbuf_free((*pkbuf)); - return OGS_ERROR; + ogs_pkbuf_free(pkbuf); + return NULL; } out: - ogs_assert(ogs_pkbuf_push(*pkbuf, encoded)); + ogs_assert(ogs_pkbuf_push(pkbuf, encoded)); - (*pkbuf)->len = encoded; + pkbuf->len = encoded; - return OGS_OK; + return pkbuf; } -int ogs_nas_esm_encode(ogs_pkbuf_t **pkbuf, ogs_nas_message_t *message) +ogs_pkbuf_t *ogs_nas_esm_encode(ogs_nas_message_t *message) { + ogs_pkbuf_t *pkbuf = NULL; int size = 0; int encoded = 0; @@ -3211,139 +3213,139 @@ int ogs_nas_esm_encode(ogs_pkbuf_t **pkbuf, ogs_nas_message_t *message) /* The Packet Buffer(ogs_pkbuf_t) for NAS message MUST make a HEADROOM. * When calculating AES_CMAC, we need to use the headroom of the packet. */ - *pkbuf = ogs_pkbuf_alloc(NULL, OGS_MAX_SDU_LEN); - ogs_assert(*pkbuf); - ogs_pkbuf_reserve(*pkbuf, OGS_NAS_HEADROOM); - ogs_pkbuf_put(*pkbuf, OGS_MAX_SDU_LEN-OGS_NAS_HEADROOM); + pkbuf = ogs_pkbuf_alloc(NULL, OGS_MAX_SDU_LEN); + ogs_assert(pkbuf); + ogs_pkbuf_reserve(pkbuf, OGS_NAS_HEADROOM); + ogs_pkbuf_put(pkbuf, OGS_MAX_SDU_LEN-OGS_NAS_HEADROOM); size = sizeof(ogs_nas_esm_header_t); - ogs_assert(ogs_pkbuf_pull(*pkbuf, size)); - memcpy((*pkbuf)->data - size, &message->esm.h, size); + ogs_assert(ogs_pkbuf_pull(pkbuf, size)); + memcpy(pkbuf->data - size, &message->esm.h, size); encoded += size; switch(message->esm.h.message_type) { case OGS_NAS_ACTIVATE_DEFAULT_EPS_BEARER_CONTEXT_REQUEST: - size = ogs_nas_encode_activate_default_eps_bearer_context_request(*pkbuf, message); + size = ogs_nas_encode_activate_default_eps_bearer_context_request(pkbuf, message); ogs_assert(size >= 0); encoded += size; break; case OGS_NAS_ACTIVATE_DEFAULT_EPS_BEARER_CONTEXT_ACCEPT: - size = ogs_nas_encode_activate_default_eps_bearer_context_accept(*pkbuf, message); + size = ogs_nas_encode_activate_default_eps_bearer_context_accept(pkbuf, message); ogs_assert(size >= 0); encoded += size; break; case OGS_NAS_ACTIVATE_DEFAULT_EPS_BEARER_CONTEXT_REJECT: - size = ogs_nas_encode_activate_default_eps_bearer_context_reject(*pkbuf, message); + size = ogs_nas_encode_activate_default_eps_bearer_context_reject(pkbuf, message); ogs_assert(size >= 0); encoded += size; break; case OGS_NAS_ACTIVATE_DEDICATED_EPS_BEARER_CONTEXT_REQUEST: - size = ogs_nas_encode_activate_dedicated_eps_bearer_context_request(*pkbuf, message); + size = ogs_nas_encode_activate_dedicated_eps_bearer_context_request(pkbuf, message); ogs_assert(size >= 0); encoded += size; break; case OGS_NAS_ACTIVATE_DEDICATED_EPS_BEARER_CONTEXT_ACCEPT: - size = ogs_nas_encode_activate_dedicated_eps_bearer_context_accept(*pkbuf, message); + size = ogs_nas_encode_activate_dedicated_eps_bearer_context_accept(pkbuf, message); ogs_assert(size >= 0); encoded += size; break; case OGS_NAS_ACTIVATE_DEDICATED_EPS_BEARER_CONTEXT_REJECT: - size = ogs_nas_encode_activate_dedicated_eps_bearer_context_reject(*pkbuf, message); + size = ogs_nas_encode_activate_dedicated_eps_bearer_context_reject(pkbuf, message); ogs_assert(size >= 0); encoded += size; break; case OGS_NAS_MODIFY_EPS_BEARER_CONTEXT_REQUEST: - size = ogs_nas_encode_modify_eps_bearer_context_request(*pkbuf, message); + size = ogs_nas_encode_modify_eps_bearer_context_request(pkbuf, message); ogs_assert(size >= 0); encoded += size; break; case OGS_NAS_MODIFY_EPS_BEARER_CONTEXT_ACCEPT: - size = ogs_nas_encode_modify_eps_bearer_context_accept(*pkbuf, message); + size = ogs_nas_encode_modify_eps_bearer_context_accept(pkbuf, message); ogs_assert(size >= 0); encoded += size; break; case OGS_NAS_MODIFY_EPS_BEARER_CONTEXT_REJECT: - size = ogs_nas_encode_modify_eps_bearer_context_reject(*pkbuf, message); + size = ogs_nas_encode_modify_eps_bearer_context_reject(pkbuf, message); ogs_assert(size >= 0); encoded += size; break; case OGS_NAS_DEACTIVATE_EPS_BEARER_CONTEXT_REQUEST: - size = ogs_nas_encode_deactivate_eps_bearer_context_request(*pkbuf, message); + size = ogs_nas_encode_deactivate_eps_bearer_context_request(pkbuf, message); ogs_assert(size >= 0); encoded += size; break; case OGS_NAS_DEACTIVATE_EPS_BEARER_CONTEXT_ACCEPT: - size = ogs_nas_encode_deactivate_eps_bearer_context_accept(*pkbuf, message); + size = ogs_nas_encode_deactivate_eps_bearer_context_accept(pkbuf, message); ogs_assert(size >= 0); encoded += size; break; case OGS_NAS_PDN_CONNECTIVITY_REQUEST: - size = ogs_nas_encode_pdn_connectivity_request(*pkbuf, message); + size = ogs_nas_encode_pdn_connectivity_request(pkbuf, message); ogs_assert(size >= 0); encoded += size; break; case OGS_NAS_PDN_CONNECTIVITY_REJECT: - size = ogs_nas_encode_pdn_connectivity_reject(*pkbuf, message); + size = ogs_nas_encode_pdn_connectivity_reject(pkbuf, message); ogs_assert(size >= 0); encoded += size; break; case OGS_NAS_PDN_DISCONNECT_REQUEST: - size = ogs_nas_encode_pdn_disconnect_request(*pkbuf, message); + size = ogs_nas_encode_pdn_disconnect_request(pkbuf, message); ogs_assert(size >= 0); encoded += size; break; case OGS_NAS_PDN_DISCONNECT_REJECT: - size = ogs_nas_encode_pdn_disconnect_reject(*pkbuf, message); + size = ogs_nas_encode_pdn_disconnect_reject(pkbuf, message); ogs_assert(size >= 0); encoded += size; break; case OGS_NAS_BEARER_RESOURCE_ALLOCATION_REQUEST: - size = ogs_nas_encode_bearer_resource_allocation_request(*pkbuf, message); + size = ogs_nas_encode_bearer_resource_allocation_request(pkbuf, message); ogs_assert(size >= 0); encoded += size; break; case OGS_NAS_BEARER_RESOURCE_ALLOCATION_REJECT: - size = ogs_nas_encode_bearer_resource_allocation_reject(*pkbuf, message); + size = ogs_nas_encode_bearer_resource_allocation_reject(pkbuf, message); ogs_assert(size >= 0); encoded += size; break; case OGS_NAS_BEARER_RESOURCE_MODIFICATION_REQUEST: - size = ogs_nas_encode_bearer_resource_modification_request(*pkbuf, message); + size = ogs_nas_encode_bearer_resource_modification_request(pkbuf, message); ogs_assert(size >= 0); encoded += size; break; case OGS_NAS_BEARER_RESOURCE_MODIFICATION_REJECT: - size = ogs_nas_encode_bearer_resource_modification_reject(*pkbuf, message); + size = ogs_nas_encode_bearer_resource_modification_reject(pkbuf, message); ogs_assert(size >= 0); encoded += size; break; case OGS_NAS_ESM_INFORMATION_REQUEST: break; case OGS_NAS_ESM_INFORMATION_RESPONSE: - size = ogs_nas_encode_esm_information_response(*pkbuf, message); + size = ogs_nas_encode_esm_information_response(pkbuf, message); ogs_assert(size >= 0); encoded += size; break; case OGS_NAS_ESM_STATUS: - size = ogs_nas_encode_esm_status(*pkbuf, message); + size = ogs_nas_encode_esm_status(pkbuf, message); ogs_assert(size >= 0); encoded += size; break; default: ogs_error("Unknown message type (0x%x) or not implemented", message->esm.h.message_type); - ogs_pkbuf_free((*pkbuf)); - return OGS_ERROR; + ogs_pkbuf_free(pkbuf); + return NULL; } - ogs_assert(ogs_pkbuf_push(*pkbuf, encoded)); - (*pkbuf)->len = encoded; + ogs_assert(ogs_pkbuf_push(pkbuf, encoded)); + pkbuf->len = encoded; - return OGS_OK; + return pkbuf; } -int ogs_nas_plain_encode(ogs_pkbuf_t **pkbuf, ogs_nas_message_t *message) +ogs_pkbuf_t *ogs_nas_plain_encode(ogs_nas_message_t *message) { ogs_assert(message); @@ -3352,12 +3354,10 @@ int ogs_nas_plain_encode(ogs_pkbuf_t **pkbuf, ogs_nas_message_t *message) if (message->emm.h.protocol_discriminator == OGS_NAS_PROTOCOL_DISCRIMINATOR_EMM) - return ogs_nas_emm_encode(pkbuf, message); + return ogs_nas_emm_encode(message); else if (message->emm.h.protocol_discriminator == OGS_NAS_PROTOCOL_DISCRIMINATOR_ESM) - return ogs_nas_esm_encode(pkbuf, message); + return ogs_nas_esm_encode(message); - ogs_assert_if_reached(); - - return OGS_OK; + return NULL; } diff --git a/lib/nas/ies.c b/lib/nas/ies.c index 804b9bd72e..1a9e6401d1 100644 --- a/lib/nas/ies.c +++ b/lib/nas/ies.c @@ -20,7 +20,7 @@ /******************************************************************************* * This file had been created by nas-message.py script v0.1.0 * Please do not modify this file but regenerate it via script. - * Created on: 2019-09-30 22:46:44.494712 by acetcom + * Created on: 2019-11-29 20:48:26.763343 by acetcom * from 24301-d80.docx ******************************************************************************/ diff --git a/lib/nas/ies.h b/lib/nas/ies.h index 60eca1c167..e3ff64e52b 100644 --- a/lib/nas/ies.h +++ b/lib/nas/ies.h @@ -20,7 +20,7 @@ /******************************************************************************* * This file had been created by nas-message.py script v0.1.0 * Please do not modify this file but regenerate it via script. - * Created on: 2019-09-30 22:46:44.492673 by acetcom + * Created on: 2019-11-29 20:48:26.761226 by acetcom * from 24301-d80.docx ******************************************************************************/ diff --git a/lib/nas/message.h b/lib/nas/message.h index 705843ec26..6adb4e7af3 100644 --- a/lib/nas/message.h +++ b/lib/nas/message.h @@ -20,7 +20,7 @@ /******************************************************************************* * This file had been created by nas-message.py script v0.1.0 * Please do not modify this file but regenerate it via script. - * Created on: 2019-09-30 22:46:44.500512 by acetcom + * Created on: 2019-11-29 20:48:26.769392 by acetcom * from 24301-d80.docx ******************************************************************************/ @@ -1408,12 +1408,11 @@ typedef struct ogs_nas_message_s { }; } ogs_nas_message_t; -int ogs_nas_emm_encode(ogs_pkbuf_t **pkbuf, ogs_nas_message_t *message); -int ogs_nas_esm_encode(ogs_pkbuf_t **pkbuf, ogs_nas_message_t *message); +ogs_pkbuf_t *ogs_nas_emm_encode(ogs_nas_message_t *message); +ogs_pkbuf_t *ogs_nas_esm_encode(ogs_nas_message_t *message); int ogs_nas_emm_decode(ogs_nas_message_t *message, ogs_pkbuf_t *pkbuf); int ogs_nas_esm_decode(ogs_nas_message_t *message, ogs_pkbuf_t *pkbuf); -int ogs_nas_plain_encode( - ogs_pkbuf_t **pkbuf, ogs_nas_message_t *message); +ogs_pkbuf_t *ogs_nas_plain_encode(ogs_nas_message_t *message); #ifdef __cplusplus } diff --git a/lib/nas/support/nas-message.py b/lib/nas/support/nas-message.py index 777e067ab7..5c304a62ce 100644 --- a/lib/nas/support/nas-message.py +++ b/lib/nas/support/nas-message.py @@ -622,12 +622,11 @@ typedef struct ogs_nas_message_s { }; } ogs_nas_message_t; -int ogs_nas_emm_encode(ogs_pkbuf_t **pkbuf, ogs_nas_message_t *message); -int ogs_nas_esm_encode(ogs_pkbuf_t **pkbuf, ogs_nas_message_t *message); +ogs_pkbuf_t *ogs_nas_emm_encode(ogs_nas_message_t *message); +ogs_pkbuf_t *ogs_nas_esm_encode(ogs_nas_message_t *message); int ogs_nas_emm_decode(ogs_nas_message_t *message, ogs_pkbuf_t *pkbuf); int ogs_nas_esm_decode(ogs_nas_message_t *message, ogs_pkbuf_t *pkbuf); -int ogs_nas_plain_encode( - ogs_pkbuf_t **pkbuf, ogs_nas_message_t *message); +ogs_pkbuf_t *ogs_nas_plain_encode(ogs_nas_message_t *message); #ifdef __cplusplus } @@ -863,8 +862,9 @@ for (k, v) in sorted_msg_list: """) -f.write("""int ogs_nas_emm_encode(ogs_pkbuf_t **pkbuf, ogs_nas_message_t *message) +f.write("""ogs_pkbuf_t *ogs_nas_emm_encode(ogs_nas_message_t *message) { + ogs_pkbuf_t *pkbuf = NULL; int size = 0; int encoded = 0; @@ -872,23 +872,23 @@ f.write("""int ogs_nas_emm_encode(ogs_pkbuf_t **pkbuf, ogs_nas_message_t *messag /* The Packet Buffer(ogs_pkbuf_t) for NAS message MUST make a HEADROOM. * When calculating AES_CMAC, we need to use the headroom of the packet. */ - *pkbuf = ogs_pkbuf_alloc(NULL, OGS_MAX_SDU_LEN); - ogs_assert(*pkbuf); - ogs_pkbuf_reserve(*pkbuf, OGS_NAS_HEADROOM); - ogs_pkbuf_put(*pkbuf, OGS_MAX_SDU_LEN-OGS_NAS_HEADROOM); + pkbuf = ogs_pkbuf_alloc(NULL, OGS_MAX_SDU_LEN); + ogs_assert(pkbuf); + ogs_pkbuf_reserve(pkbuf, OGS_NAS_HEADROOM); + ogs_pkbuf_put(pkbuf, OGS_MAX_SDU_LEN-OGS_NAS_HEADROOM); size = sizeof(ogs_nas_emm_header_t); - ogs_assert(ogs_pkbuf_pull(*pkbuf, size)); + ogs_assert(ogs_pkbuf_pull(pkbuf, size)); - memcpy((*pkbuf)->data - size, &message->emm.h, size); + memcpy(pkbuf->data - size, &message->emm.h, size); encoded += size; if (message->emm.h.security_header_type >= OGS_NAS_SECURITY_HEADER_FOR_SERVICE_REQUEST_MESSAGE) { - ogs_assert(ogs_pkbuf_push(*pkbuf, 1)); + ogs_assert(ogs_pkbuf_push(pkbuf, 1)); encoded -= 1; - size = ogs_nas_encode_service_request(*pkbuf, message); + size = ogs_nas_encode_service_request(pkbuf, message); ogs_assert(size >= 0); encoded += size; @@ -905,7 +905,7 @@ for (k, v) in sorted_msg_list: if float(msg_list[k]["type"]) < 192 and k.find("FROM UE") == -1 and k != "SERVICE REQUEST": f.write(" case OGS_NAS_%s:\n" % v_upper(k)) if len(msg_list[k]["ies"]) != 0: - f.write(" size = ogs_nas_encode_%s(*pkbuf, message);\n" % v_lower(k)) + f.write(" size = ogs_nas_encode_%s(pkbuf, message);\n" % v_lower(k)) f.write(" ogs_assert(size >= 0);\n") f.write(" encoded += size;\n") f.write(" break;\n") @@ -913,22 +913,23 @@ for (k, v) in sorted_msg_list: f.write(""" default: ogs_error("Unknown message type (0x%x) or not implemented", message->emm.h.message_type); - ogs_pkbuf_free((*pkbuf)); - return OGS_ERROR; + ogs_pkbuf_free(pkbuf); + return NULL; } out: - ogs_assert(ogs_pkbuf_push(*pkbuf, encoded)); + ogs_assert(ogs_pkbuf_push(pkbuf, encoded)); - (*pkbuf)->len = encoded; + pkbuf->len = encoded; - return OGS_OK; + return pkbuf; } """) -f.write("""int ogs_nas_esm_encode(ogs_pkbuf_t **pkbuf, ogs_nas_message_t *message) +f.write("""ogs_pkbuf_t *ogs_nas_esm_encode(ogs_nas_message_t *message) { + ogs_pkbuf_t *pkbuf = NULL; int size = 0; int encoded = 0; @@ -936,14 +937,14 @@ f.write("""int ogs_nas_esm_encode(ogs_pkbuf_t **pkbuf, ogs_nas_message_t *messag /* The Packet Buffer(ogs_pkbuf_t) for NAS message MUST make a HEADROOM. * When calculating AES_CMAC, we need to use the headroom of the packet. */ - *pkbuf = ogs_pkbuf_alloc(NULL, OGS_MAX_SDU_LEN); - ogs_assert(*pkbuf); - ogs_pkbuf_reserve(*pkbuf, OGS_NAS_HEADROOM); - ogs_pkbuf_put(*pkbuf, OGS_MAX_SDU_LEN-OGS_NAS_HEADROOM); + pkbuf = ogs_pkbuf_alloc(NULL, OGS_MAX_SDU_LEN); + ogs_assert(pkbuf); + ogs_pkbuf_reserve(pkbuf, OGS_NAS_HEADROOM); + ogs_pkbuf_put(pkbuf, OGS_MAX_SDU_LEN-OGS_NAS_HEADROOM); size = sizeof(ogs_nas_esm_header_t); - ogs_assert(ogs_pkbuf_pull(*pkbuf, size)); - memcpy((*pkbuf)->data - size, &message->esm.h, size); + ogs_assert(ogs_pkbuf_pull(pkbuf, size)); + memcpy(pkbuf->data - size, &message->esm.h, size); encoded += size; switch(message->esm.h.message_type) @@ -956,7 +957,7 @@ for (k, v) in sorted_msg_list: if float(msg_list[k]["type"]) >= 192: f.write(" case OGS_NAS_%s:\n" % v_upper(k)) if len(msg_list[k]["ies"]) != 0: - f.write(" size = ogs_nas_encode_%s(*pkbuf, message);\n" % v_lower(k)) + f.write(" size = ogs_nas_encode_%s(pkbuf, message);\n" % v_lower(k)) f.write(" ogs_assert(size >= 0);\n") f.write(" encoded += size;\n") f.write(" break;\n") @@ -964,17 +965,17 @@ for (k, v) in sorted_msg_list: f.write(""" default: ogs_error("Unknown message type (0x%x) or not implemented", message->esm.h.message_type); - ogs_pkbuf_free((*pkbuf)); - return OGS_ERROR; + ogs_pkbuf_free(pkbuf); + return NULL; } - ogs_assert(ogs_pkbuf_push(*pkbuf, encoded)); - (*pkbuf)->len = encoded; + ogs_assert(ogs_pkbuf_push(pkbuf, encoded)); + pkbuf->len = encoded; - return OGS_OK; + return pkbuf; } -int ogs_nas_plain_encode(ogs_pkbuf_t **pkbuf, ogs_nas_message_t *message) +ogs_pkbuf_t *ogs_nas_plain_encode(ogs_nas_message_t *message) { ogs_assert(message); @@ -983,14 +984,12 @@ int ogs_nas_plain_encode(ogs_pkbuf_t **pkbuf, ogs_nas_message_t *message) if (message->emm.h.protocol_discriminator == OGS_NAS_PROTOCOL_DISCRIMINATOR_EMM) - return ogs_nas_emm_encode(pkbuf, message); + return ogs_nas_emm_encode(message); else if (message->emm.h.protocol_discriminator == OGS_NAS_PROTOCOL_DISCRIMINATOR_ESM) - return ogs_nas_esm_encode(pkbuf, message); + return ogs_nas_esm_encode(message); - ogs_assert_if_reached(); - - return OGS_OK; + return NULL; } """) diff --git a/lib/s1ap/message.c b/lib/s1ap/message.c index 361c2d5620..044ebaceac 100644 --- a/lib/s1ap/message.c +++ b/lib/s1ap/message.c @@ -21,30 +21,32 @@ int __ogs_s1ap_domain; -int ogs_s1ap_encode(ogs_pkbuf_t **pkbuf, ogs_s1ap_message_t *message) +ogs_pkbuf_t *ogs_s1ap_encode(ogs_s1ap_message_t *message) { asn_enc_rval_t enc_ret = {0}; + ogs_pkbuf_t *pkbuf = NULL; ogs_assert(message); if (ogs_log_get_domain_level(OGS_LOG_DOMAIN) >= OGS_LOG_TRACE) asn_fprint(stdout, &asn_DEF_S1AP_S1AP_PDU, message); - *pkbuf = ogs_pkbuf_alloc(NULL, OGS_MAX_SDU_LEN); - ogs_pkbuf_put(*pkbuf, OGS_MAX_SDU_LEN); + pkbuf = ogs_pkbuf_alloc(NULL, OGS_MAX_SDU_LEN); + ogs_pkbuf_put(pkbuf, OGS_MAX_SDU_LEN); enc_ret = aper_encode_to_buffer(&asn_DEF_S1AP_S1AP_PDU, NULL, - message, (*pkbuf)->data, OGS_MAX_SDU_LEN); - if (enc_ret.encoded < 0) - { + message, pkbuf->data, OGS_MAX_SDU_LEN); + ogs_s1ap_free(message); + + if (enc_ret.encoded < 0) { ogs_error("Failed to encode S1AP-PDU[%d]", (int)enc_ret.encoded); - ogs_pkbuf_free(*pkbuf); - return OGS_ERROR; + ogs_pkbuf_free(pkbuf); + return NULL; } - ogs_pkbuf_trim(*pkbuf, (enc_ret.encoded >> 3)); + ogs_pkbuf_trim(pkbuf, (enc_ret.encoded >> 3)); - return OGS_OK; + return pkbuf; } int ogs_s1ap_decode(ogs_s1ap_message_t *message, ogs_pkbuf_t *pkbuf) diff --git a/lib/s1ap/message.h b/lib/s1ap/message.h index ea71b8e55a..05859d79db 100644 --- a/lib/s1ap/message.h +++ b/lib/s1ap/message.h @@ -53,7 +53,7 @@ extern "C" { typedef struct S1AP_S1AP_PDU ogs_s1ap_message_t; int ogs_s1ap_decode(ogs_s1ap_message_t *message, ogs_pkbuf_t *pkbuf); -int ogs_s1ap_encode(ogs_pkbuf_t **pkbuf, ogs_s1ap_message_t *message); +ogs_pkbuf_t *ogs_s1ap_encode(ogs_s1ap_message_t *message); int ogs_s1ap_free(ogs_s1ap_message_t *message); #ifdef __cplusplus diff --git a/src/mme/emm-build.c b/src/mme/emm-build.c index 12a20c2859..484721da13 100644 --- a/src/mme/emm-build.c +++ b/src/mme/emm-build.c @@ -25,11 +25,11 @@ #undef OGS_LOG_DOMAIN #define OGS_LOG_DOMAIN __emm_log_domain -int emm_build_attach_accept( - ogs_pkbuf_t **emmbuf, mme_ue_t *mme_ue, ogs_pkbuf_t *esmbuf) +ogs_pkbuf_t *emm_build_attach_accept( + mme_ue_t *mme_ue, ogs_pkbuf_t *esmbuf) { - int rv; ogs_nas_message_t message; + ogs_pkbuf_t *pkbuf = NULL; ogs_nas_attach_accept_t *attach_accept = &message.emm.attach_accept; ogs_nas_eps_attach_result_t *eps_attach_result = &attach_accept->eps_attach_result; @@ -130,18 +130,17 @@ int emm_build_attach_accept( ogs_debug(" P-TMSI: 0x%08x", tmsi->tmsi); } - rv = nas_security_encode(emmbuf, mme_ue, &message); - ogs_assert(rv == OGS_OK && *emmbuf); + pkbuf = nas_security_encode(mme_ue, &message); ogs_pkbuf_free(esmbuf); - return OGS_OK; + return pkbuf; } -int emm_build_attach_reject( - ogs_pkbuf_t **emmbuf, ogs_nas_emm_cause_t emm_cause, ogs_pkbuf_t *esmbuf) +ogs_pkbuf_t *emm_build_attach_reject( + ogs_nas_emm_cause_t emm_cause, ogs_pkbuf_t *esmbuf) { - int rv; ogs_nas_message_t message; + ogs_pkbuf_t *pkbuf = NULL; ogs_nas_attach_reject_t *attach_reject = &message.emm.attach_reject; memset(&message, 0, sizeof(message)); @@ -157,20 +156,15 @@ int emm_build_attach_reject( attach_reject->esm_message_container.length = esmbuf->len; } - rv = ogs_nas_plain_encode(emmbuf, &message); - ogs_assert(rv == OGS_OK && *emmbuf); - - if (esmbuf) { + pkbuf = ogs_nas_plain_encode(&message); + if (esmbuf) ogs_pkbuf_free(esmbuf); - } - return rv; + return pkbuf; } -int emm_build_identity_request( - ogs_pkbuf_t **emmbuf, mme_ue_t *mme_ue) +ogs_pkbuf_t *emm_build_identity_request(mme_ue_t *mme_ue) { - int rv; ogs_nas_message_t message; ogs_nas_identity_request_t *identity_request = &message.emm.identity_request; @@ -185,16 +179,12 @@ int emm_build_identity_request( ogs_debug(" Identity Type 2 : IMSI"); identity_request->identity_type.type = OGS_NAS_IDENTITY_TYPE_2_IMSI; - rv = ogs_nas_plain_encode(emmbuf, &message); - ogs_assert(rv == OGS_OK && *emmbuf); - - return rv; + return ogs_nas_plain_encode(&message); } -int emm_build_authentication_request( - ogs_pkbuf_t **emmbuf, ogs_diam_e_utran_vector_t *e_utran_vector) +ogs_pkbuf_t *emm_build_authentication_request( + ogs_diam_e_utran_vector_t *e_utran_vector) { - int rv; ogs_nas_message_t message; ogs_nas_authentication_request_t *authentication_request = &message.emm.authentication_request; @@ -212,15 +202,11 @@ int emm_build_authentication_request( authentication_request->authentication_parameter_autn.length = OGS_AUTN_LEN; - rv = ogs_nas_plain_encode(emmbuf, &message); - ogs_assert(rv == OGS_OK && *emmbuf); - - return rv; + return ogs_nas_plain_encode(&message); } -int emm_build_authentication_reject(ogs_pkbuf_t **emmbuf) +ogs_pkbuf_t *emm_build_authentication_reject(void) { - int rv; ogs_nas_message_t message; memset(&message, 0, sizeof(message)); @@ -228,17 +214,11 @@ int emm_build_authentication_reject(ogs_pkbuf_t **emmbuf) message.emm.h.protocol_discriminator = OGS_NAS_PROTOCOL_DISCRIMINATOR_EMM; message.emm.h.message_type = OGS_NAS_AUTHENTICATION_REJECT; - rv = ogs_nas_plain_encode(emmbuf, &message); - ogs_assert(rv == OGS_OK && *emmbuf); - - return rv; + return ogs_nas_plain_encode(&message); } -int emm_build_security_mode_command( - ogs_pkbuf_t **emmbuf, mme_ue_t *mme_ue) +ogs_pkbuf_t *emm_build_security_mode_command(mme_ue_t *mme_ue) { - int rv; - ogs_nas_message_t message; ogs_nas_security_mode_command_t *security_mode_command = &message.emm.security_mode_command; @@ -314,11 +294,10 @@ int emm_build_security_mode_command( imeisv_request->imeisv_request_value = OGS_NAS_IMEISV_REQUESTED; if (mme_ue->selected_int_algorithm == OGS_NAS_SECURITY_ALGORITHMS_EIA0) { - ogs_fatal("Encrypt[0x%x] can be skipped with EEA0, " + ogs_error("Encrypt[0x%x] can be skipped with EEA0, " "but Integrity[0x%x] cannot be bypassed with EIA0", mme_ue->selected_enc_algorithm, mme_ue->selected_int_algorithm); - ogs_assert_if_reached(); - return OGS_ERROR; + return NULL; } mme_kdf_nas(MME_KDF_NAS_INT_ALG, mme_ue->selected_int_algorithm, @@ -326,15 +305,11 @@ int emm_build_security_mode_command( mme_kdf_nas(MME_KDF_NAS_ENC_ALG, mme_ue->selected_enc_algorithm, mme_ue->kasme, mme_ue->knas_enc); - rv = nas_security_encode(emmbuf, mme_ue, &message); - ogs_assert(rv == OGS_OK && *emmbuf); - - return OGS_OK; + return nas_security_encode(mme_ue, &message); } -int emm_build_detach_accept(ogs_pkbuf_t **emmbuf, mme_ue_t *mme_ue) +ogs_pkbuf_t *emm_build_detach_accept(mme_ue_t *mme_ue) { - int rv; ogs_nas_message_t message; ogs_assert(mme_ue); @@ -350,13 +325,10 @@ int emm_build_detach_accept(ogs_pkbuf_t **emmbuf, mme_ue_t *mme_ue) message.emm.h.protocol_discriminator = OGS_NAS_PROTOCOL_DISCRIMINATOR_EMM; message.emm.h.message_type = OGS_NAS_DETACH_ACCEPT; - rv = nas_security_encode(emmbuf, mme_ue, &message); - ogs_assert(rv == OGS_OK && emmbuf); - - return OGS_OK; + return nas_security_encode(mme_ue, &message); } -int emm_build_tau_accept(ogs_pkbuf_t **emmbuf, mme_ue_t *mme_ue) +ogs_pkbuf_t *emm_build_tau_accept(mme_ue_t *mme_ue) { ogs_nas_message_t message; ogs_nas_tracking_area_update_accept_t *tau_accept = @@ -449,14 +421,11 @@ int emm_build_tau_accept(ogs_pkbuf_t **emmbuf, mme_ue_t *mme_ue) tau_accept->eps_network_feature_support.length = 1; tau_accept->eps_network_feature_support.ims_vops = 1; - ogs_assert(nas_security_encode(emmbuf, mme_ue, &message) == OGS_OK && - *emmbuf); - - return OGS_OK; + return nas_security_encode(mme_ue, &message); } -int emm_build_tau_reject(ogs_pkbuf_t **emmbuf, ogs_nas_emm_cause_t emm_cause, - mme_ue_t *mme_ue) +ogs_pkbuf_t *emm_build_tau_reject( + ogs_nas_emm_cause_t emm_cause, mme_ue_t *mme_ue) { ogs_nas_message_t message; ogs_nas_tracking_area_update_reject_t *tau_reject = @@ -474,13 +443,11 @@ int emm_build_tau_reject(ogs_pkbuf_t **emmbuf, ogs_nas_emm_cause_t emm_cause, tau_reject->emm_cause = emm_cause; - ogs_assert(ogs_nas_plain_encode(emmbuf, &message) == OGS_OK && *emmbuf); - - return OGS_OK; + return ogs_nas_plain_encode(&message); } -int emm_build_service_reject(ogs_pkbuf_t **emmbuf, ogs_nas_emm_cause_t emm_cause, - mme_ue_t *mme_ue) +ogs_pkbuf_t *emm_build_service_reject( + ogs_nas_emm_cause_t emm_cause, mme_ue_t *mme_ue) { ogs_nas_message_t message; ogs_nas_service_reject_t *service_reject = &message.emm.service_reject; @@ -496,12 +463,10 @@ int emm_build_service_reject(ogs_pkbuf_t **emmbuf, ogs_nas_emm_cause_t emm_cause service_reject->emm_cause = emm_cause; - ogs_assert(ogs_nas_plain_encode(emmbuf, &message) == OGS_OK && *emmbuf); - - return OGS_OK; + return ogs_nas_plain_encode(&message); } -int emm_build_cs_service_notification(ogs_pkbuf_t **emmbuf, mme_ue_t *mme_ue) +ogs_pkbuf_t *emm_build_cs_service_notification(mme_ue_t *mme_ue) { ogs_nas_message_t message; ogs_nas_cs_service_notification_t *cs_service_notification = @@ -525,14 +490,11 @@ int emm_build_cs_service_notification(ogs_pkbuf_t **emmbuf, mme_ue_t *mme_ue) /* FIXME : What optional filed should be included in this message? */ - ogs_assert(nas_security_encode(emmbuf, mme_ue, &message) == OGS_OK && - *emmbuf); - - return OGS_OK; + return nas_security_encode(mme_ue, &message); } -int emm_build_downlink_nas_transport(ogs_pkbuf_t **emmbuf, mme_ue_t *mme_ue, - uint8_t *buffer, uint8_t length) +ogs_pkbuf_t *emm_build_downlink_nas_transport( + mme_ue_t *mme_ue, uint8_t *buffer, uint8_t length) { ogs_nas_message_t message; ogs_nas_downlink_nas_transport_t *downlink_nas_transport = @@ -553,8 +515,5 @@ int emm_build_downlink_nas_transport(ogs_pkbuf_t **emmbuf, mme_ue_t *mme_ue, nas_message_container->length = length; memcpy(nas_message_container->buffer, buffer, length); - ogs_assert(nas_security_encode(emmbuf, mme_ue, &message) == OGS_OK && - *emmbuf); - - return OGS_OK; + return nas_security_encode(mme_ue, &message); } diff --git a/src/mme/emm-build.h b/src/mme/emm-build.h index d78c3c5841..1a3efd018d 100644 --- a/src/mme/emm-build.h +++ b/src/mme/emm-build.h @@ -26,33 +26,30 @@ extern "C" { #endif -int emm_build_attach_accept(ogs_pkbuf_t **emmbuf, +ogs_pkbuf_t *emm_build_attach_accept( mme_ue_t *mme_ue, ogs_pkbuf_t *esmbuf); -int emm_build_attach_reject(ogs_pkbuf_t **emmbuf, +ogs_pkbuf_t *emm_build_attach_reject( ogs_nas_emm_cause_t emm_cause, ogs_pkbuf_t *esmbuf); -int emm_build_identity_request( - ogs_pkbuf_t **emmbuf, mme_ue_t *mme_ue); -int emm_build_security_mode_command( - ogs_pkbuf_t **emmbuf, mme_ue_t *mme_ue); +ogs_pkbuf_t *emm_build_identity_request(mme_ue_t *mme_ue); +ogs_pkbuf_t *emm_build_security_mode_command(mme_ue_t *mme_ue); -int emm_build_authentication_request( - ogs_pkbuf_t **emmbuf, ogs_diam_e_utran_vector_t *e_utran_vector); -int emm_build_authentication_reject(ogs_pkbuf_t **emmbuf); +ogs_pkbuf_t *emm_build_authentication_request( + ogs_diam_e_utran_vector_t *e_utran_vector); +ogs_pkbuf_t *emm_build_authentication_reject(void); -int emm_build_detach_accept( - ogs_pkbuf_t **emmbuf, mme_ue_t *mme_ue); +ogs_pkbuf_t *emm_build_detach_accept(mme_ue_t *mme_ue); -int emm_build_tau_accept(ogs_pkbuf_t **emmbuf, mme_ue_t *mme_ue); -int emm_build_tau_reject(ogs_pkbuf_t **emmbuf, - ogs_nas_emm_cause_t emm_cause,mme_ue_t *mme_ue); - -int emm_build_service_reject(ogs_pkbuf_t **emmbuf, +ogs_pkbuf_t *emm_build_tau_accept(mme_ue_t *mme_ue); +ogs_pkbuf_t *emm_build_tau_reject( ogs_nas_emm_cause_t emm_cause, mme_ue_t *mme_ue); -int emm_build_cs_service_notification(ogs_pkbuf_t **emmbuf, mme_ue_t *mme_ue); -int emm_build_downlink_nas_transport(ogs_pkbuf_t **emmbuf, mme_ue_t *mme_ue, - uint8_t *buffer, uint8_t length); +ogs_pkbuf_t *emm_build_service_reject( + ogs_nas_emm_cause_t emm_cause, mme_ue_t *mme_ue); + +ogs_pkbuf_t *emm_build_cs_service_notification(mme_ue_t *mme_ue); +ogs_pkbuf_t *emm_build_downlink_nas_transport( + mme_ue_t *mme_ue, uint8_t *buffer, uint8_t length); #ifdef __cplusplus } diff --git a/src/mme/emm-handler.c b/src/mme/emm-handler.c index e51f8382b6..f00a937058 100644 --- a/src/mme/emm-handler.c +++ b/src/mme/emm-handler.c @@ -221,7 +221,10 @@ int emm_handle_attach_complete( (int)local.tm_gmtoff); rv = nas_send_emm_to_esm(mme_ue, &attach_complete->esm_message_container); - ogs_expect(rv == OGS_OK); + if (rv != OGS_OK) { + ogs_error("nas_send_emm_to_esm() failed"); + return OGS_ERROR; + } memset(&message, 0, sizeof(message)); message.h.security_header_type = @@ -272,11 +275,9 @@ int emm_handle_attach_complete( &mme_self()->short_name, sizeof(ogs_nas_network_name_t)); } - rv = nas_security_encode(&emmbuf, mme_ue, &message); - if (rv == OGS_OK) { - ogs_assert(emmbuf); - ogs_expect(nas_send_to_downlink_nas_transport(mme_ue, emmbuf) == OGS_OK); - } + emmbuf = nas_security_encode(mme_ue, &message); + if (emmbuf) + nas_send_to_downlink_nas_transport(mme_ue, emmbuf); ogs_debug("[EMM] EMM information"); ogs_debug(" IMSI[%s]", mme_ue->imsi_bcd); @@ -301,15 +302,22 @@ int emm_handle_identity_response( if (mobile_identity->imsi.type == OGS_NAS_IDENTITY_TYPE_2_IMSI) { char imsi_bcd[OGS_MAX_IMSI_BCD_LEN+1]; - ogs_assert(sizeof(ogs_nas_mobile_identity_imsi_t) == - mobile_identity->length); + if (sizeof(ogs_nas_mobile_identity_imsi_t) != mobile_identity->length) { + ogs_error("mobile_identity length (%d != %d)", + (int)sizeof(ogs_nas_mobile_identity_imsi_t), + mobile_identity->length); + return OGS_ERROR; + } memcpy(&mme_ue->nas_mobile_identity_imsi, &mobile_identity->imsi, mobile_identity->length); ogs_nas_imsi_to_bcd( &mobile_identity->imsi, mobile_identity->length, imsi_bcd); mme_ue_set_imsi(mme_ue, imsi_bcd); - ogs_expect(mme_ue->imsi_len); + if (mme_ue->imsi_len != OGS_MAX_IMSI_LEN) { + ogs_error("Invalid IMSI LEN[%d]", mme_ue->imsi_len); + return OGS_ERROR; + } } else { ogs_warn("Not supported Identity type[%d]", mobile_identity->imsi.type); } diff --git a/src/mme/emm-sm.c b/src/mme/emm-sm.c index 770fb3efd8..657f3993d5 100644 --- a/src/mme/emm-sm.c +++ b/src/mme/emm-sm.c @@ -143,8 +143,7 @@ static void common_register_state(ogs_fsm_t *s, mme_event_t *e) return; } - rv = s1ap_send_initial_context_setup_request(mme_ue); - ogs_expect(rv == OGS_OK); + s1ap_send_initial_context_setup_request(mme_ue); return; } @@ -191,9 +190,8 @@ static void common_register_state(ogs_fsm_t *s, mme_event_t *e) if (!MME_UE_HAVE_IMSI(mme_ue)) { ogs_warn("[EMM] TAU request : Unknown UE"); - rv = nas_send_tau_reject(mme_ue, - EMM_CAUSE_UE_IDENTITY_CANNOT_BE_DERIVED_BY_THE_NETWORK); - ogs_expect(rv == OGS_OK); + nas_send_tau_reject(mme_ue, + EMM_CAUSE_UE_IDENTITY_CANNOT_BE_DERIVED_BY_THE_NETWORK); OGS_FSM_TRAN(s, &emm_state_exception); return; } @@ -241,7 +239,7 @@ static void common_register_state(ogs_fsm_t *s, mme_event_t *e) } if (MME_P_TMSI_IS_AVAILABLE(mme_ue)) { - rv = sgsap_send_detach_indication(mme_ue); + sgsap_send_detach_indication(mme_ue); } else { mme_send_delete_session_or_detach(mme_ue); } @@ -262,11 +260,10 @@ static void common_register_state(ogs_fsm_t *s, mme_event_t *e) MME_UE_S1AP_ID = enb_ue->mme_ue_s1ap_id; ENB_UE_S1AP_ID = enb_ue->enb_ue_s1ap_id; - rv = s1ap_send_error_indication(enb_ue->enb, + s1ap_send_error_indication(enb_ue->enb, &MME_UE_S1AP_ID, &ENB_UE_S1AP_ID, S1AP_Cause_PR_transport, S1AP_CauseTransport_transport_resource_unavailable); - ogs_expect(rv == OGS_OK); } return; @@ -339,8 +336,15 @@ static void common_register_state(ogs_fsm_t *s, mme_event_t *e) if (SECURITY_CONTEXT_IS_VALID(mme_ue)) { rv = nas_send_emm_to_esm(mme_ue, &mme_ue->pdn_connectivity_request); - ogs_expect(rv == OGS_OK); - OGS_FSM_TRAN(s, &emm_state_initial_context_setup); + if (rv != OGS_OK) { + ogs_error("nas_send_emm_to_esm() failed"); + nas_send_attach_reject(mme_ue, + EMM_CAUSE_PROTOCOL_ERROR_UNSPECIFIED, + ESM_CAUSE_PROTOCOL_ERROR_UNSPECIFIED); + OGS_FSM_TRAN(s, &emm_state_exception); + } else { + OGS_FSM_TRAN(s, &emm_state_initial_context_setup); + } } else { if (SESSION_CONTEXT_IS_AVAILABLE(mme_ue)) { mme_gtp_send_delete_all_sessions(mme_ue); @@ -355,9 +359,8 @@ static void common_register_state(ogs_fsm_t *s, mme_event_t *e) if (!SESSION_CONTEXT_IS_AVAILABLE(mme_ue)) { ogs_warn("No PDN Connection : UE[%s]", mme_ue->imsi_bcd); - rv = nas_send_tau_reject(mme_ue, + nas_send_tau_reject(mme_ue, EMM_CAUSE_UE_IDENTITY_CANNOT_BE_DERIVED_BY_THE_NETWORK); - ogs_expect(rv == OGS_OK); OGS_FSM_TRAN(s, emm_state_exception); break; } @@ -371,21 +374,17 @@ static void common_register_state(ogs_fsm_t *s, mme_event_t *e) if (procedureCode == S1AP_ProcedureCode_id_initialUEMessage) { ogs_debug(" Iniital UE Message"); if (mme_ue->nas_eps.update.active_flag) { - rv = nas_send_tau_accept(mme_ue, + nas_send_tau_accept(mme_ue, S1AP_ProcedureCode_id_InitialContextSetup); - ogs_expect(rv == OGS_OK); } else { - rv = nas_send_tau_accept(mme_ue, + nas_send_tau_accept(mme_ue, S1AP_ProcedureCode_id_downlinkNASTransport); - ogs_expect(rv == OGS_OK); - mme_send_release_access_bearer_or_ue_context_release(enb_ue); } } else if (procedureCode == S1AP_ProcedureCode_id_uplinkNASTransport) { ogs_debug(" Uplink NAS Transport"); - rv = nas_send_tau_accept(mme_ue, + nas_send_tau_accept(mme_ue, S1AP_ProcedureCode_id_downlinkNASTransport); - ogs_expect(rv == OGS_OK); } else { ogs_fatal("Invalid Procedure Code[%d]", (int)procedureCode); } @@ -440,8 +439,7 @@ static void common_register_state(ogs_fsm_t *s, mme_event_t *e) return; } - rv = s1ap_send_initial_context_setup_request(mme_ue); - ogs_expect(rv == OGS_OK); + s1ap_send_initial_context_setup_request(mme_ue); } else if (procedureCode == S1AP_ProcedureCode_id_uplinkNASTransport) { ogs_debug(" Uplink NAS Transport"); @@ -466,8 +464,7 @@ static void common_register_state(ogs_fsm_t *s, mme_event_t *e) return; } - rv = s1ap_send_ue_context_modification_request(mme_ue); - ogs_expect(rv == OGS_OK); + s1ap_send_ue_context_modification_request(mme_ue); } else { ogs_fatal("Invalid Procedure Code[%d]", (int)procedureCode); } @@ -525,8 +522,7 @@ void emm_state_authentication(ogs_fsm_t *s, mme_event_t *e) authentication_response_parameter->length); ogs_log_hexdump(OGS_LOG_WARN, mme_ue->xres, OGS_MAX_RES_LEN); - rv = nas_send_authentication_reject(mme_ue); - ogs_expect(rv == OGS_OK); + nas_send_authentication_reject(mme_ue); OGS_FSM_TRAN(&mme_ue->sm, &emm_state_exception); } else { OGS_FSM_TRAN(&mme_ue->sm, &emm_state_security_mode); @@ -569,8 +565,7 @@ void emm_state_authentication(ogs_fsm_t *s, mme_event_t *e) break; } - rv = nas_send_authentication_reject(mme_ue); - ogs_expect(rv == OGS_OK); + nas_send_authentication_reject(mme_ue); OGS_FSM_TRAN(&mme_ue->sm, &emm_state_exception); break; @@ -751,9 +746,8 @@ void emm_state_security_mode(ogs_fsm_t *s, mme_event_t *e) break; case OGS_NAS_TRACKING_AREA_UPDATE_REQUEST: ogs_debug("[EMM] Tracking area update request"); - rv = nas_send_tau_reject(mme_ue, + nas_send_tau_reject(mme_ue, EMM_CAUSE_SECURITY_MODE_REJECTED_UNSPECIFIED); - ogs_expect(rv == OGS_OK); OGS_FSM_TRAN(s, &emm_state_exception); break; case OGS_NAS_EMM_STATUS: diff --git a/src/mme/esm-build.c b/src/mme/esm-build.c index 87794cd078..f6b7b999df 100644 --- a/src/mme/esm-build.c +++ b/src/mme/esm-build.c @@ -24,8 +24,8 @@ #undef OGS_LOG_DOMAIN #define OGS_LOG_DOMAIN __esm_log_domain -int esm_build_pdn_connectivity_reject( - ogs_pkbuf_t **pkbuf, mme_sess_t *sess, ogs_nas_esm_cause_t esm_cause) +ogs_pkbuf_t *esm_build_pdn_connectivity_reject( + mme_sess_t *sess, ogs_nas_esm_cause_t esm_cause) { mme_ue_t *mme_ue = NULL; ogs_nas_message_t message; @@ -54,16 +54,13 @@ int esm_build_pdn_connectivity_reject( pdn_connectivity_reject->esm_cause = esm_cause; if (OGS_FSM_CHECK(&mme_ue->sm, emm_state_registered)) { - ogs_expect(nas_security_encode(pkbuf, mme_ue, &message) == OGS_OK && - *pkbuf); + return nas_security_encode(mme_ue, &message); } else { - ogs_expect(ogs_nas_plain_encode(pkbuf, &message) == OGS_OK && *pkbuf); + return ogs_nas_plain_encode(&message); } - - return OGS_OK; } -int esm_build_information_request(ogs_pkbuf_t **pkbuf, mme_bearer_t *bearer) +ogs_pkbuf_t *esm_build_information_request(mme_bearer_t *bearer) { ogs_nas_message_t message; mme_ue_t *mme_ue = NULL; @@ -88,14 +85,11 @@ int esm_build_information_request(ogs_pkbuf_t **pkbuf, mme_bearer_t *bearer) message.esm.h.procedure_transaction_identity = sess->pti; message.esm.h.message_type = OGS_NAS_ESM_INFORMATION_REQUEST; - ogs_expect(nas_security_encode(pkbuf, mme_ue, &message) == OGS_OK && - *pkbuf); - - return OGS_OK; + return nas_security_encode(mme_ue, &message); } -int esm_build_activate_default_bearer_context_request( - ogs_pkbuf_t **pkbuf, mme_sess_t *sess) +ogs_pkbuf_t *esm_build_activate_default_bearer_context_request( + mme_sess_t *sess) { ogs_nas_message_t message; ogs_nas_activate_default_eps_bearer_context_request_t @@ -171,7 +165,7 @@ int esm_build_activate_default_bearer_context_request( ogs_debug(" IPv4v6"); } else { ogs_error("Unexpected PDN Type %u", pdn_address->pdn_type); - return OGS_ERROR; + return NULL; } if (pdn->ambr.downlink || pdn->ambr.uplink) { @@ -189,17 +183,14 @@ int esm_build_activate_default_bearer_context_request( } if (OGS_FSM_CHECK(&mme_ue->sm, emm_state_registered)) { - ogs_expect(nas_security_encode(pkbuf, mme_ue, &message) == OGS_OK && - *pkbuf); + return nas_security_encode(mme_ue, &message); } else { - ogs_expect(ogs_nas_plain_encode(pkbuf, &message) == OGS_OK && *pkbuf); + return ogs_nas_plain_encode(&message); } - - return OGS_OK; } -int esm_build_activate_dedicated_bearer_context_request( - ogs_pkbuf_t **pkbuf, mme_bearer_t *bearer) +ogs_pkbuf_t *esm_build_activate_dedicated_bearer_context_request( + mme_bearer_t *bearer) { mme_ue_t *mme_ue = NULL; mme_bearer_t *linked_bearer = NULL; @@ -246,14 +237,11 @@ int esm_build_activate_dedicated_bearer_context_request( ogs_assert(bearer->tft.data); memcpy(tft->buffer, bearer->tft.data, tft->length); - ogs_expect(nas_security_encode(pkbuf, mme_ue, &message) == OGS_OK && - *pkbuf); - - return OGS_OK; + return nas_security_encode(mme_ue, &message); } -int esm_build_modify_bearer_context_request( - ogs_pkbuf_t **pkbuf, mme_bearer_t *bearer, int qos_presence, int tft_presence) +ogs_pkbuf_t *esm_build_modify_bearer_context_request( + mme_bearer_t *bearer, int qos_presence, int tft_presence) { mme_ue_t *mme_ue = NULL; mme_sess_t *sess = NULL; @@ -303,14 +291,11 @@ int esm_build_modify_bearer_context_request( memcpy(tft->buffer, bearer->tft.data, tft->length); } - ogs_expect(nas_security_encode(pkbuf, mme_ue, &message) == OGS_OK && - *pkbuf); - - return OGS_OK; + return nas_security_encode(mme_ue, &message); } -int esm_build_deactivate_bearer_context_request( - ogs_pkbuf_t **pkbuf, mme_bearer_t *bearer, ogs_nas_esm_cause_t esm_cause) +ogs_pkbuf_t *esm_build_deactivate_bearer_context_request( + mme_bearer_t *bearer, ogs_nas_esm_cause_t esm_cause) { mme_ue_t *mme_ue = NULL; mme_sess_t *sess = NULL; @@ -342,8 +327,5 @@ int esm_build_deactivate_bearer_context_request( deactivate_eps_bearer_context_request->esm_cause = esm_cause; - ogs_expect(nas_security_encode(pkbuf, mme_ue, &message) == OGS_OK && - *pkbuf); - - return OGS_OK; + return nas_security_encode(mme_ue, &message); } diff --git a/src/mme/esm-build.h b/src/mme/esm-build.h index 3357844f3c..9688f8d9f1 100644 --- a/src/mme/esm-build.h +++ b/src/mme/esm-build.h @@ -26,17 +26,16 @@ extern "C" { #endif -int esm_build_pdn_connectivity_reject(ogs_pkbuf_t **pkbuf, +ogs_pkbuf_t *esm_build_pdn_connectivity_reject( mme_sess_t *sess, ogs_nas_esm_cause_t esm_cause); -int esm_build_information_request(ogs_pkbuf_t **pkbuf, +ogs_pkbuf_t *esm_build_information_request(mme_bearer_t *bearer); +ogs_pkbuf_t *esm_build_activate_default_bearer_context_request( + mme_sess_t *sess); +ogs_pkbuf_t *esm_build_activate_dedicated_bearer_context_request( mme_bearer_t *bearer); -int esm_build_activate_default_bearer_context_request( - ogs_pkbuf_t **pkbuf, mme_sess_t *sess); -int esm_build_activate_dedicated_bearer_context_request( - ogs_pkbuf_t **pkbuf, mme_bearer_t *bearer); -int esm_build_modify_bearer_context_request(ogs_pkbuf_t **pkbuf, +ogs_pkbuf_t *esm_build_modify_bearer_context_request( mme_bearer_t *bearer, int qos_presence, int tft_presence); -int esm_build_deactivate_bearer_context_request(ogs_pkbuf_t **pkbuf, +ogs_pkbuf_t *esm_build_deactivate_bearer_context_request( mme_bearer_t *bearer, ogs_nas_esm_cause_t esm_cause); #ifdef __cplusplus diff --git a/src/mme/esm-handler.c b/src/mme/esm-handler.c index a58f4d40ef..bd3d857731 100644 --- a/src/mme/esm-handler.c +++ b/src/mme/esm-handler.c @@ -31,7 +31,6 @@ int esm_handle_pdn_connectivity_request(mme_bearer_t *bearer, ogs_nas_pdn_connectivity_request_t *pdn_connectivity_request) { - int rv; mme_ue_t *mme_ue = NULL; mme_sess_t *sess = NULL; uint8_t security_protected_required = 0; @@ -67,10 +66,8 @@ int esm_handle_pdn_connectivity_request(mme_bearer_t *bearer, pdn_connectivity_request->access_point_name.apn); if (!sess->pdn) { /* Invalid APN */ - rv = nas_send_pdn_connectivity_reject( + nas_send_pdn_connectivity_reject( sess, ESM_CAUSE_MISSING_OR_UNKNOWN_APN); - ogs_expect(rv == OGS_OK); - return OGS_ERROR; } } @@ -98,13 +95,10 @@ int esm_handle_pdn_connectivity_request(mme_bearer_t *bearer, if (sess->pdn) { ogs_debug(" APN[%s]", sess->pdn->apn); - rv = mme_gtp_send_create_session_request(sess); - ogs_expect(rv == OGS_OK); + mme_gtp_send_create_session_request(sess); } else { - rv = nas_send_pdn_connectivity_reject( + nas_send_pdn_connectivity_reject( sess, ESM_CAUSE_MISSING_OR_UNKNOWN_APN); - ogs_expect(rv == OGS_OK); - return OGS_ERROR; } @@ -114,7 +108,6 @@ int esm_handle_pdn_connectivity_request(mme_bearer_t *bearer, int esm_handle_information_response(mme_sess_t *sess, ogs_nas_esm_information_response_t *esm_information_response) { - int rv; mme_ue_t *mme_ue = NULL; ogs_assert(sess); @@ -147,14 +140,11 @@ int esm_handle_information_response(mme_sess_t *sess, nas_send_attach_accept(mme_ue); } } else { - rv = mme_gtp_send_create_session_request(sess); - ogs_expect(rv == OGS_OK); + mme_gtp_send_create_session_request(sess); } } else { - rv = nas_send_pdn_connectivity_reject( + nas_send_pdn_connectivity_reject( sess, ESM_CAUSE_MISSING_OR_UNKNOWN_APN); - ogs_expect(rv == OGS_OK); - return OGS_ERROR; } diff --git a/src/mme/esm-sm.c b/src/mme/esm-sm.c index 4e00f22875..bc195ad65a 100644 --- a/src/mme/esm-sm.c +++ b/src/mme/esm-sm.c @@ -110,13 +110,10 @@ void esm_state_inactive(ogs_fsm_t *s, mme_event_t *e) /* Check if Initial Context Setup Response or * E-RAB Setup Response is received */ if (MME_HAVE_ENB_S1U_PATH(bearer)) { - rv = mme_gtp_send_modify_bearer_request(bearer, 0); - ogs_expect(rv == OGS_OK); + mme_gtp_send_modify_bearer_request(bearer, 0); } - rv = nas_send_activate_all_dedicated_bearers(bearer); - ogs_expect(rv == OGS_OK); - + nas_send_activate_all_dedicated_bearers(bearer); OGS_FSM_TRAN(s, esm_state_active); break; case OGS_NAS_ACTIVATE_DEDICATED_EPS_BEARER_CONTEXT_ACCEPT: @@ -127,8 +124,7 @@ void esm_state_inactive(ogs_fsm_t *s, mme_event_t *e) /* Check if Initial Context Setup Response or * E-RAB Setup Response is received */ if (MME_HAVE_ENB_S1U_PATH(bearer)) { - rv = mme_gtp_send_create_bearer_response(bearer); - ogs_expect(rv == OGS_OK); + mme_gtp_send_create_bearer_response(bearer); } OGS_FSM_TRAN(s, esm_state_active); @@ -216,11 +212,9 @@ void esm_state_active(ogs_fsm_t *s, mme_event_t *e) ogs_debug(" IMSI[%s] PTI[%d] EBI[%d]", mme_ue->imsi_bcd, sess->pti, bearer->ebi); if (MME_HAVE_SGW_S1U_PATH(sess)) { - rv = mme_gtp_send_delete_session_request(sess); - ogs_expect(rv == OGS_OK); + mme_gtp_send_delete_session_request(sess); } else { - rv = nas_send_deactivate_bearer_context_request(bearer); - ogs_expect(rv == OGS_OK); + nas_send_deactivate_bearer_context_request(bearer); } OGS_FSM_TRAN(s, esm_state_pdn_will_disconnect); break; @@ -229,16 +223,14 @@ void esm_state_active(ogs_fsm_t *s, mme_event_t *e) ogs_debug(" IMSI[%s] PTI[%d] EBI[%d]", mme_ue->imsi_bcd, sess->pti, bearer->ebi); - rv = mme_gtp_send_update_bearer_response(bearer); - ogs_expect(rv == OGS_OK); + mme_gtp_send_update_bearer_response(bearer); break; case OGS_NAS_DEACTIVATE_EPS_BEARER_CONTEXT_ACCEPT: ogs_debug("[ESM] [A] Deactivate EPS bearer " "context accept"); ogs_debug(" IMSI[%s] PTI[%d] EBI[%d]", mme_ue->imsi_bcd, sess->pti, bearer->ebi); - rv = mme_gtp_send_delete_bearer_response(bearer); - ogs_expect(rv == OGS_OK); + mme_gtp_send_delete_bearer_response(bearer); OGS_FSM_TRAN(s, esm_state_bearer_deactivated); break; default: diff --git a/src/mme/mme-gtp-path.c b/src/mme/mme-gtp-path.c index 24a037b80c..83b00232c5 100644 --- a/src/mme/mme-gtp-path.c +++ b/src/mme/mme-gtp-path.c @@ -160,7 +160,7 @@ void mme_gtp_close(void) ogs_socknode_remove_all(&mme_self()->gtpc_list6); } -int mme_gtp_send_create_session_request(mme_sess_t *sess) +void mme_gtp_send_create_session_request(mme_sess_t *sess) { int rv; ogs_gtp_header_t h; @@ -175,24 +175,17 @@ int mme_gtp_send_create_session_request(mme_sess_t *sess) h.type = OGS_GTP_CREATE_SESSION_REQUEST_TYPE; h.teid = mme_ue->sgw_s11_teid; - rv = mme_s11_build_create_session_request(&pkbuf, h.type, sess); - if (rv != OGS_OK) - return rv; + pkbuf = mme_s11_build_create_session_request(h.type, sess); + ogs_expect_or_return(pkbuf); xact = ogs_gtp_xact_local_create(mme_ue->gnode, &h, pkbuf, timeout, mme_ue); - if (!xact) { - ogs_pkbuf_free(pkbuf); - return OGS_ERROR; - } + ogs_expect_or_return(xact); rv = ogs_gtp_xact_commit(xact); ogs_expect(rv == OGS_OK); - - return OGS_OK; } - -int mme_gtp_send_modify_bearer_request( +void mme_gtp_send_modify_bearer_request( mme_bearer_t *bearer, int uli_presence) { int rv; @@ -211,24 +204,17 @@ int mme_gtp_send_modify_bearer_request( h.type = OGS_GTP_MODIFY_BEARER_REQUEST_TYPE; h.teid = mme_ue->sgw_s11_teid; - rv = mme_s11_build_modify_bearer_request( - &pkbuf, h.type, bearer, uli_presence); - if (rv != OGS_OK) - return rv; + pkbuf = mme_s11_build_modify_bearer_request(h.type, bearer, uli_presence); + ogs_expect_or_return(pkbuf); xact = ogs_gtp_xact_local_create(mme_ue->gnode, &h, pkbuf, timeout, mme_ue); - if (!xact) { - ogs_pkbuf_free(pkbuf); - return OGS_ERROR; - } + ogs_expect_or_return(xact); rv = ogs_gtp_xact_commit(xact); ogs_expect(rv == OGS_OK); - - return OGS_OK; } -int mme_gtp_send_delete_session_request(mme_sess_t *sess) +void mme_gtp_send_delete_session_request(mme_sess_t *sess) { int rv; ogs_pkbuf_t *s11buf = NULL; @@ -244,25 +230,18 @@ int mme_gtp_send_delete_session_request(mme_sess_t *sess) h.type = OGS_GTP_DELETE_SESSION_REQUEST_TYPE; h.teid = mme_ue->sgw_s11_teid; - rv = mme_s11_build_delete_session_request(&s11buf, h.type, sess); - if (rv != OGS_OK) - return rv; + s11buf = mme_s11_build_delete_session_request(h.type, sess); + ogs_expect_or_return(s11buf); xact = ogs_gtp_xact_local_create(mme_ue->gnode, &h, s11buf, timeout, sess); - if (!xact) { - ogs_pkbuf_free(s11buf); - return OGS_ERROR; - } + ogs_expect_or_return(xact); rv = ogs_gtp_xact_commit(xact); ogs_expect(rv == OGS_OK); - - return OGS_OK; } void mme_gtp_send_delete_all_sessions(mme_ue_t *mme_ue) { - int rv; mme_sess_t *sess = NULL, *next_sess = NULL; ogs_assert(mme_ue); @@ -287,8 +266,7 @@ void mme_gtp_send_delete_all_sessions(mme_ue_t *mme_ue) OGS_FSM_CHECK(&bearer->sm, esm_state_pdn_will_disconnect)) { ogs_warn("PDN will disconnect[EBI:%d]", bearer->ebi); } else { - rv = mme_gtp_send_delete_session_request(sess); - ogs_expect(rv == OGS_OK); + mme_gtp_send_delete_session_request(sess); } } else { mme_sess_remove(sess); @@ -298,7 +276,7 @@ void mme_gtp_send_delete_all_sessions(mme_ue_t *mme_ue) } } -int mme_gtp_send_create_bearer_response(mme_bearer_t *bearer) +void mme_gtp_send_create_bearer_response(mme_bearer_t *bearer) { int rv; @@ -318,23 +296,17 @@ int mme_gtp_send_create_bearer_response(mme_bearer_t *bearer) h.type = OGS_GTP_CREATE_BEARER_RESPONSE_TYPE; h.teid = mme_ue->sgw_s11_teid; - rv = mme_s11_build_create_bearer_response(&pkbuf, h.type, bearer); - if (rv != OGS_OK) - return rv; + pkbuf = mme_s11_build_create_bearer_response(h.type, bearer); + ogs_expect_or_return(pkbuf); rv = ogs_gtp_xact_update_tx(xact, &h, pkbuf); - if (!xact) { - ogs_pkbuf_free(pkbuf); - return OGS_ERROR; - } + ogs_expect_or_return(rv == OGS_OK); rv = ogs_gtp_xact_commit(xact); ogs_expect(rv == OGS_OK); - - return OGS_OK; } -int mme_gtp_send_update_bearer_response(mme_bearer_t *bearer) +void mme_gtp_send_update_bearer_response(mme_bearer_t *bearer) { int rv; @@ -354,23 +326,17 @@ int mme_gtp_send_update_bearer_response(mme_bearer_t *bearer) h.type = OGS_GTP_UPDATE_BEARER_RESPONSE_TYPE; h.teid = mme_ue->sgw_s11_teid; - rv = mme_s11_build_update_bearer_response(&pkbuf, h.type, bearer); - if (rv != OGS_OK) - return rv; + pkbuf = mme_s11_build_update_bearer_response(h.type, bearer); + ogs_expect_or_return(pkbuf); rv = ogs_gtp_xact_update_tx(xact, &h, pkbuf); - if (!xact) { - ogs_pkbuf_free(pkbuf); - return OGS_ERROR; - } + ogs_expect_or_return(rv == OGS_OK); rv = ogs_gtp_xact_commit(xact); ogs_expect(rv == OGS_OK); - - return OGS_OK; } -int mme_gtp_send_delete_bearer_response(mme_bearer_t *bearer) +void mme_gtp_send_delete_bearer_response(mme_bearer_t *bearer) { int rv; @@ -390,21 +356,14 @@ int mme_gtp_send_delete_bearer_response(mme_bearer_t *bearer) h.type = OGS_GTP_DELETE_BEARER_RESPONSE_TYPE; h.teid = mme_ue->sgw_s11_teid; - rv = mme_s11_build_delete_bearer_response(&pkbuf, h.type, bearer); - if (rv != OGS_OK) - return rv; - + pkbuf = mme_s11_build_delete_bearer_response(h.type, bearer); + ogs_expect_or_return(pkbuf); rv = ogs_gtp_xact_update_tx(xact, &h, pkbuf); - if (!xact) { - ogs_pkbuf_free(pkbuf); - return OGS_ERROR; - } + ogs_expect_or_return(rv == OGS_OK); rv = ogs_gtp_xact_commit(xact); ogs_expect(rv == OGS_OK); - - return OGS_OK; } void mme_gtp_send_release_access_bearers_request(mme_ue_t *mme_ue) @@ -420,21 +379,17 @@ void mme_gtp_send_release_access_bearers_request(mme_ue_t *mme_ue) h.type = OGS_GTP_RELEASE_ACCESS_BEARERS_REQUEST_TYPE; h.teid = mme_ue->sgw_s11_teid; - rv = mme_s11_build_release_access_bearers_request(&pkbuf, h.type); - if (rv != OGS_OK) - return; + pkbuf = mme_s11_build_release_access_bearers_request(h.type); + ogs_expect_or_return(pkbuf); xact = ogs_gtp_xact_local_create(mme_ue->gnode, &h, pkbuf, timeout, mme_ue); - if (!xact) { - ogs_pkbuf_free(pkbuf); - return; - } + ogs_expect_or_return(xact); rv = ogs_gtp_xact_commit(xact); ogs_expect(rv == OGS_OK); } -int mme_gtp_send_create_indirect_data_forwarding_tunnel_request( +void mme_gtp_send_create_indirect_data_forwarding_tunnel_request( mme_ue_t *mme_ue) { int rv; @@ -448,24 +403,18 @@ int mme_gtp_send_create_indirect_data_forwarding_tunnel_request( h.type = OGS_GTP_CREATE_INDIRECT_DATA_FORWARDING_TUNNEL_REQUEST_TYPE; h.teid = mme_ue->sgw_s11_teid; - rv = mme_s11_build_create_indirect_data_forwarding_tunnel_request( - &pkbuf, h.type, mme_ue); - if (rv != OGS_OK) - return rv; + pkbuf = mme_s11_build_create_indirect_data_forwarding_tunnel_request( + h.type, mme_ue); + ogs_expect_or_return(pkbuf); xact = ogs_gtp_xact_local_create(mme_ue->gnode, &h, pkbuf, timeout, mme_ue); - if (!xact) { - ogs_pkbuf_free(pkbuf); - return OGS_ERROR; - } + ogs_expect_or_return(xact); rv = ogs_gtp_xact_commit(xact); ogs_expect(rv == OGS_OK); - - return OGS_OK; } -int mme_gtp_send_delete_indirect_data_forwarding_tunnel_request( +void mme_gtp_send_delete_indirect_data_forwarding_tunnel_request( mme_ue_t *mme_ue) { int rv; @@ -483,13 +432,8 @@ int mme_gtp_send_delete_indirect_data_forwarding_tunnel_request( ogs_pkbuf_reserve(pkbuf, OGS_TLV_MAX_HEADROOM); xact = ogs_gtp_xact_local_create(mme_ue->gnode, &h, pkbuf, timeout, mme_ue); - if (!xact) { - ogs_pkbuf_free(pkbuf); - return OGS_ERROR; - } + ogs_expect_or_return(xact); rv = ogs_gtp_xact_commit(xact); ogs_expect(rv == OGS_OK); - - return OGS_OK; } diff --git a/src/mme/mme-gtp-path.h b/src/mme/mme-gtp-path.h index 61c701c4b3..b8cf350608 100644 --- a/src/mme/mme-gtp-path.h +++ b/src/mme/mme-gtp-path.h @@ -29,19 +29,19 @@ extern "C" { int mme_gtp_open(void); void mme_gtp_close(void); -int mme_gtp_send_create_session_request(mme_sess_t *sess); -int mme_gtp_send_modify_bearer_request( +void mme_gtp_send_create_session_request(mme_sess_t *sess); +void mme_gtp_send_modify_bearer_request( mme_bearer_t *bearer, int uli_presence); -int mme_gtp_send_delete_session_request(mme_sess_t *sess); +void mme_gtp_send_delete_session_request(mme_sess_t *sess); void mme_gtp_send_delete_all_sessions(mme_ue_t *mme_ue); -int mme_gtp_send_create_bearer_response(mme_bearer_t *bearer); -int mme_gtp_send_update_bearer_response(mme_bearer_t *bearer); -int mme_gtp_send_delete_bearer_response(mme_bearer_t *bearer); +void mme_gtp_send_create_bearer_response(mme_bearer_t *bearer); +void mme_gtp_send_update_bearer_response(mme_bearer_t *bearer); +void mme_gtp_send_delete_bearer_response(mme_bearer_t *bearer); void mme_gtp_send_release_access_bearers_request(mme_ue_t *mme_ue); -int mme_gtp_send_create_indirect_data_forwarding_tunnel_request( +void mme_gtp_send_create_indirect_data_forwarding_tunnel_request( mme_ue_t *mme_ue); -int mme_gtp_send_delete_indirect_data_forwarding_tunnel_request( +void mme_gtp_send_delete_indirect_data_forwarding_tunnel_request( mme_ue_t *mme_ue); #ifdef __cplusplus diff --git a/src/mme/mme-s11-build.c b/src/mme/mme-s11-build.c index 0489b136b5..4eacdd4e30 100644 --- a/src/mme/mme-s11-build.c +++ b/src/mme/mme-s11-build.c @@ -21,8 +21,8 @@ #include "mme-s11-build.h" -int mme_s11_build_create_session_request( - ogs_pkbuf_t **pkbuf, uint8_t type, mme_sess_t *sess) +ogs_pkbuf_t *mme_s11_build_create_session_request( + uint8_t type, mme_sess_t *sess) { int rv; ogs_pdn_t *pdn = NULL; @@ -252,13 +252,10 @@ int mme_s11_build_create_session_request( req->charging_characteristics.len = 2; gtp_message.h.type = type; - rv = ogs_gtp_build_msg(pkbuf, >p_message); - ogs_expect(rv == OGS_OK); - - return OGS_OK; + return ogs_gtp_build_msg(>p_message); } -int mme_s11_build_modify_bearer_request(ogs_pkbuf_t **pkbuf, +ogs_pkbuf_t *mme_s11_build_modify_bearer_request( uint8_t type, mme_bearer_t *bearer, int uli_presence) { int rv; @@ -315,16 +312,12 @@ int mme_s11_build_modify_bearer_request(ogs_pkbuf_t **pkbuf, } gtp_message.h.type = type; - rv = ogs_gtp_build_msg(pkbuf, >p_message); - ogs_expect(rv == OGS_OK); - - return OGS_OK; + return ogs_gtp_build_msg(>p_message); } -int mme_s11_build_delete_session_request( - ogs_pkbuf_t **pkbuf, uint8_t type, mme_sess_t *sess) +ogs_pkbuf_t *mme_s11_build_delete_session_request( + uint8_t type, mme_sess_t *sess) { - int rv; ogs_gtp_message_t gtp_message; ogs_gtp_delete_session_request_t *req = >p_message.delete_session_request; @@ -369,14 +362,11 @@ int mme_s11_build_delete_session_request( req->indication_flags.len = sizeof(ogs_gtp_indication_t); gtp_message.h.type = type; - rv = ogs_gtp_build_msg(pkbuf, >p_message); - ogs_expect(rv == OGS_OK); - - return OGS_OK; + return ogs_gtp_build_msg(>p_message); } -int mme_s11_build_create_bearer_response( - ogs_pkbuf_t **pkbuf, uint8_t type, mme_bearer_t *bearer) +ogs_pkbuf_t *mme_s11_build_create_bearer_response( + uint8_t type, mme_bearer_t *bearer) { int rv; ogs_gtp_message_t gtp_message; @@ -470,16 +460,12 @@ int mme_s11_build_create_bearer_response( rsp->ue_time_zone.len = sizeof(ue_timezone); gtp_message.h.type = type; - rv = ogs_gtp_build_msg(pkbuf, >p_message); - ogs_expect(rv == OGS_OK); - - return OGS_OK; + return ogs_gtp_build_msg(>p_message); } -int mme_s11_build_update_bearer_response( - ogs_pkbuf_t **pkbuf, uint8_t type, mme_bearer_t *bearer) +ogs_pkbuf_t *mme_s11_build_update_bearer_response( + uint8_t type, mme_bearer_t *bearer) { - int rv; ogs_gtp_message_t gtp_message; ogs_gtp_update_bearer_response_t *rsp = >p_message.update_bearer_response; @@ -549,16 +535,12 @@ int mme_s11_build_update_bearer_response( rsp->ue_time_zone.len = sizeof(ue_timezone); gtp_message.h.type = type; - rv = ogs_gtp_build_msg(pkbuf, >p_message); - ogs_assert(rv == OGS_OK); - - return OGS_OK; + return ogs_gtp_build_msg(>p_message); } -int mme_s11_build_delete_bearer_response( - ogs_pkbuf_t **pkbuf, uint8_t type, mme_bearer_t *bearer) +ogs_pkbuf_t *mme_s11_build_delete_bearer_response( + uint8_t type, mme_bearer_t *bearer) { - int rv; ogs_gtp_message_t gtp_message; ogs_gtp_delete_bearer_response_t *rsp = >p_message.delete_bearer_response; @@ -628,16 +610,11 @@ int mme_s11_build_delete_bearer_response( rsp->ue_time_zone.len = sizeof(ue_timezone); gtp_message.h.type = type; - rv = ogs_gtp_build_msg(pkbuf, >p_message); - ogs_expect(rv == OGS_OK); - - return OGS_OK; + return ogs_gtp_build_msg(>p_message); } -int mme_s11_build_release_access_bearers_request( - ogs_pkbuf_t **pkbuf, uint8_t type) +ogs_pkbuf_t *mme_s11_build_release_access_bearers_request(uint8_t type) { - int rv; ogs_gtp_message_t gtp_message; ogs_gtp_release_access_bearers_request_t *req = >p_message.release_access_bearers_request; @@ -649,16 +626,11 @@ int mme_s11_build_release_access_bearers_request( req->originating_node.u8 = OGS_GTP_NODE_TYPE_MME; gtp_message.h.type = type; - rv = ogs_gtp_build_msg(pkbuf, >p_message); - ogs_expect(rv == OGS_OK); - - return OGS_OK; + return ogs_gtp_build_msg(>p_message); } -int mme_s11_build_downlink_data_notification_ack( - ogs_pkbuf_t **pkbuf, uint8_t type) +ogs_pkbuf_t *mme_s11_build_downlink_data_notification_ack(uint8_t type) { - int rv; ogs_gtp_message_t gtp_message; ogs_gtp_downlink_data_notification_acknowledge_t *ack = >p_message.downlink_data_notification_acknowledge; @@ -677,14 +649,11 @@ int mme_s11_build_downlink_data_notification_ack( ack->cause.len = sizeof(cause); gtp_message.h.type = type; - rv = ogs_gtp_build_msg(pkbuf, >p_message); - ogs_expect(rv == OGS_OK); - - return OGS_OK; + return ogs_gtp_build_msg(>p_message); } -int mme_s11_build_create_indirect_data_forwarding_tunnel_request( - ogs_pkbuf_t **pkbuf, uint8_t type, mme_ue_t *mme_ue) +ogs_pkbuf_t *mme_s11_build_create_indirect_data_forwarding_tunnel_request( + uint8_t type, mme_ue_t *mme_ue) { int rv; int i; @@ -757,8 +726,5 @@ int mme_s11_build_create_indirect_data_forwarding_tunnel_request( } gtp_message.h.type = type; - rv = ogs_gtp_build_msg(pkbuf, >p_message); - ogs_expect(rv == OGS_OK); - - return OGS_OK; + return ogs_gtp_build_msg(>p_message); } diff --git a/src/mme/mme-s11-build.h b/src/mme/mme-s11-build.h index 64208e4a49..927db0e8e5 100644 --- a/src/mme/mme-s11-build.h +++ b/src/mme/mme-s11-build.h @@ -24,24 +24,22 @@ extern "C" { #endif -int mme_s11_build_create_session_request( - ogs_pkbuf_t **pkbuf, uint8_t type, mme_sess_t *sess); -int mme_s11_build_modify_bearer_request(ogs_pkbuf_t **pkbuf, +ogs_pkbuf_t *mme_s11_build_create_session_request( + uint8_t type, mme_sess_t *sess); +ogs_pkbuf_t *mme_s11_build_modify_bearer_request( uint8_t type, mme_bearer_t *bearer, int uli_presense); -int mme_s11_build_delete_session_request( - ogs_pkbuf_t **pkbuf, uint8_t type, mme_sess_t *sess); -int mme_s11_build_create_bearer_response( - ogs_pkbuf_t **pkbuf, uint8_t type, mme_bearer_t *bearer); -int mme_s11_build_update_bearer_response( - ogs_pkbuf_t **pkbuf, uint8_t type, mme_bearer_t *bearer); -int mme_s11_build_delete_bearer_response( - ogs_pkbuf_t **pkbuf, uint8_t type, mme_bearer_t *bearer); -int mme_s11_build_release_access_bearers_request( - ogs_pkbuf_t **pkbuf, uint8_t type); -int mme_s11_build_downlink_data_notification_ack( - ogs_pkbuf_t **pkbuf, uint8_t type); -int mme_s11_build_create_indirect_data_forwarding_tunnel_request( - ogs_pkbuf_t **pkbuf, uint8_t type, mme_ue_t *mme_ue); +ogs_pkbuf_t *mme_s11_build_delete_session_request( + uint8_t type, mme_sess_t *sess); +ogs_pkbuf_t *mme_s11_build_create_bearer_response( + uint8_t type, mme_bearer_t *bearer); +ogs_pkbuf_t *mme_s11_build_update_bearer_response( + uint8_t type, mme_bearer_t *bearer); +ogs_pkbuf_t *mme_s11_build_delete_bearer_response( + uint8_t type, mme_bearer_t *bearer); +ogs_pkbuf_t *mme_s11_build_release_access_bearers_request(uint8_t type); +ogs_pkbuf_t *mme_s11_build_downlink_data_notification_ack(uint8_t type); +ogs_pkbuf_t *mme_s11_build_create_indirect_data_forwarding_tunnel_request( + uint8_t type, mme_ue_t *mme_ue); #ifdef __cplusplus } diff --git a/src/mme/mme-s11-handler.c b/src/mme/mme-s11-handler.c index bcb69f6e77..0d53be5c4e 100644 --- a/src/mme/mme-s11-handler.c +++ b/src/mme/mme-s11-handler.c @@ -56,7 +56,7 @@ void mme_s11_handle_create_session_response( } rv = ogs_gtp_xact_commit(xact); - ogs_expect(rv == OGS_OK); + ogs_expect_or_return(rv == OGS_OK); if (rsp->cause.presence) { ogs_gtp_cause_t *cause = rsp->cause.data; @@ -177,7 +177,7 @@ void mme_s11_handle_modify_bearer_response( } rv = ogs_gtp_xact_commit(xact); - ogs_expect(rv == OGS_OK); + ogs_expect_or_return(rv == OGS_OK); if (rsp->cause.presence) { ogs_gtp_cause_t *cause = rsp->cause.data; @@ -197,8 +197,7 @@ void mme_s11_handle_modify_bearer_response( } GTP_COUNTER_CHECK(mme_ue, GTP_COUNTER_MODIFY_BEARER_BY_PATH_SWITCH, - rv = s1ap_send_path_switch_ack(mme_ue); - ogs_expect(rv == OGS_OK); + s1ap_send_path_switch_ack(mme_ue); ); GTP_COUNTER_CHECK(mme_ue, GTP_COUNTER_MODIFY_BEARER_BY_HANDOVER_NOTIFY, @@ -234,7 +233,7 @@ void mme_s11_handle_delete_session_response( ogs_assert(mme_ue); rv = ogs_gtp_xact_commit(xact); - ogs_expect(rv == OGS_OK); + ogs_expect_or_return(rv == OGS_OK); if (rsp->cause.presence) { ogs_gtp_cause_t *cause = rsp->cause.data; @@ -258,11 +257,10 @@ void mme_s11_handle_delete_session_response( } } else if (OGS_FSM_CHECK(&mme_ue->sm, emm_state_registered)) { mme_bearer_t *bearer = mme_default_bearer_in_sess(sess); - ogs_expect(bearer); + ogs_expect_or_return(bearer); if (OGS_FSM_CHECK(&bearer->sm, esm_state_pdn_will_disconnect)) { - rv = nas_send_deactivate_bearer_context_request(bearer); - ogs_expect(rv == OGS_OK); + nas_send_deactivate_bearer_context_request(bearer); /* * mme_sess_remove() should not be called here. @@ -393,7 +391,7 @@ void mme_s11_handle_create_bearer_request( ogs_assert(rv == OGS_OK); /* Bearer QoS */ - ogs_expect(ogs_gtp_parse_bearer_qos(&bearer_qos, + ogs_expect_or_return(ogs_gtp_parse_bearer_qos(&bearer_qos, &req->bearer_contexts.bearer_level_qos) == req->bearer_contexts.bearer_level_qos.len); bearer->qos.qci = bearer_qos.qci; @@ -422,8 +420,7 @@ void mme_s11_handle_create_bearer_request( /* Check if Initial Context Setup Response or * E-RAB Setup Response is received */ MME_HAVE_ENB_S1U_PATH(default_bearer)) { - rv = nas_send_activate_dedicated_bearer_context_request(bearer); - ogs_expect(rv == OGS_OK); + nas_send_activate_dedicated_bearer_context_request(bearer); } } @@ -431,7 +428,6 @@ void mme_s11_handle_update_bearer_request( ogs_gtp_xact_t *xact, mme_ue_t *mme_ue, ogs_gtp_update_bearer_request_t *req) { - int rv; uint8_t cause_value = 0; mme_bearer_t *bearer = NULL; ogs_gtp_bearer_qos_t bearer_qos; @@ -482,7 +478,7 @@ void mme_s11_handle_update_bearer_request( MME_HAVE_ENB_S1U_PATH(bearer)) { if (req->bearer_contexts.bearer_level_qos.presence == 1) { /* Bearer QoS */ - ogs_expect(ogs_gtp_parse_bearer_qos(&bearer_qos, + ogs_expect_or_return(ogs_gtp_parse_bearer_qos(&bearer_qos, &req->bearer_contexts.bearer_level_qos) == req->bearer_contexts.bearer_level_qos.len); bearer->qos.qci = bearer_qos.qci; @@ -504,16 +500,13 @@ void mme_s11_handle_update_bearer_request( if (req->bearer_contexts.bearer_level_qos.presence == 1 || req->bearer_contexts.tft.presence == 1) { - rv = nas_send_modify_bearer_context_request( - bearer, + nas_send_modify_bearer_context_request(bearer, req->bearer_contexts.bearer_level_qos.presence, req->bearer_contexts.tft.presence); - ogs_expect(rv == OGS_OK); } else { ogs_warn("[IGNORE] Update Bearer Request : " "Both QoS and TFT is NULL"); - rv = mme_gtp_send_update_bearer_response(bearer); - ogs_expect(rv == OGS_OK); + mme_gtp_send_update_bearer_response(bearer); } } else { if (!OGS_FSM_CHECK(&bearer->sm, esm_state_active)) { @@ -523,14 +516,12 @@ void mme_s11_handle_update_bearer_request( } else ogs_assert_if_reached(); } - } void mme_s11_handle_delete_bearer_request( ogs_gtp_xact_t *xact, mme_ue_t *mme_ue, ogs_gtp_delete_bearer_request_t *req) { - int rv; mme_bearer_t *bearer = NULL; ogs_assert(xact); @@ -541,11 +532,11 @@ void mme_s11_handle_delete_bearer_request( if (mme_ue && req->linked_eps_bearer_id.presence == 1) { bearer = mme_bearer_find_by_ue_ebi( mme_ue, req->linked_eps_bearer_id.u8); - ogs_expect(bearer); + ogs_expect_or_return(bearer); } else if (mme_ue && req->eps_bearer_ids.presence == 1) { bearer = mme_bearer_find_by_ue_ebi( mme_ue, req->eps_bearer_ids.u8); - ogs_expect(bearer); + ogs_expect_or_return(bearer); } else { ogs_error("No Linked EBI or EPS Bearer ID"); ogs_gtp_send_error_message(xact, mme_ue ? mme_ue->sgw_s11_teid : 0, @@ -555,14 +546,12 @@ void mme_s11_handle_delete_bearer_request( } ogs_assert(mme_ue); - ogs_assert(bearer); ogs_debug(" MME_S11_TEID[%d] SGW_S11_TEID[%d]", mme_ue->mme_s11_teid, mme_ue->sgw_s11_teid); - ogs_expect_or_return(bearer); - /* Save Transaction. will be handled after EMM-attached */ + ogs_assert(bearer); bearer->xact = xact; if (/* Check if Activate Default/Dedicated Bearer Accept is received */ @@ -570,8 +559,7 @@ void mme_s11_handle_delete_bearer_request( /* Check if Initial Context Setup Response or * E-RAB Setup Response is received */ MME_HAVE_ENB_S1U_PATH(bearer)) { - rv = nas_send_deactivate_bearer_context_request(bearer); - ogs_expect(rv == OGS_OK); + nas_send_deactivate_bearer_context_request(bearer); } else { if (!OGS_FSM_CHECK(&bearer->sm, esm_state_active)) { ogs_assert_if_reached(); @@ -603,7 +591,7 @@ void mme_s11_handle_release_access_bearers_response( } rv = ogs_gtp_xact_commit(xact); - ogs_expect(rv == OGS_OK); + ogs_expect_or_return(rv == OGS_OK); if (rsp->cause.presence) { ogs_gtp_cause_t *cause = rsp->cause.data; @@ -672,11 +660,11 @@ void mme_s11_handle_downlink_data_notification( h.type = OGS_GTP_DOWNLINK_DATA_NOTIFICATION_ACKNOWLEDGE_TYPE; h.teid = mme_ue->sgw_s11_teid; - rv = mme_s11_build_downlink_data_notification_ack(&s11buf, h.type); - ogs_expect(rv == OGS_OK); + s11buf = mme_s11_build_downlink_data_notification_ack(h.type); + ogs_expect_or_return(s11buf); rv = ogs_gtp_xact_update_tx(xact, &h, s11buf); - ogs_expect(rv == OGS_OK); + ogs_expect_or_return(rv == OGS_OK); rv = ogs_gtp_xact_commit(xact); ogs_expect(rv == OGS_OK); @@ -707,7 +695,7 @@ void mme_s11_handle_create_indirect_data_forwarding_tunnel_response( } rv = ogs_gtp_xact_commit(xact); - ogs_expect(rv == OGS_OK); + ogs_expect_or_return(rv == OGS_OK); if (rsp->cause.presence) { ogs_gtp_cause_t *cause = rsp->cause.data; @@ -736,9 +724,7 @@ void mme_s11_handle_create_indirect_data_forwarding_tunnel_response( bearer = mme_bearer_find_by_ue_ebi(mme_ue, bearers[i]->eps_bearer_id.u8); - ogs_expect(bearer); - if (!bearer) - continue; + ogs_expect_or_return(bearer); if (bearers[i]->s4_u_sgsn_f_teid.presence) { teid = bearers[i]->s4_u_sgsn_f_teid.data; @@ -746,7 +732,7 @@ void mme_s11_handle_create_indirect_data_forwarding_tunnel_response( bearer->sgw_dl_teid = ntohl(teid->teid); rv = ogs_gtp_f_teid_to_ip(teid, &bearer->sgw_dl_ip); - ogs_expect(rv == OGS_OK); + ogs_expect_or_return(rv == OGS_OK); } if (bearers[i]->s2b_u_epdg_f_teid_5.presence) { teid = bearers[i]->s2b_u_epdg_f_teid_5.data; @@ -754,15 +740,14 @@ void mme_s11_handle_create_indirect_data_forwarding_tunnel_response( bearer->sgw_ul_teid = ntohl(teid->teid); rv = ogs_gtp_f_teid_to_ip(teid, &bearer->sgw_ul_ip); - ogs_expect(rv == OGS_OK); + ogs_expect_or_return(rv == OGS_OK); } } source_ue = mme_ue->enb_ue; ogs_assert(source_ue); - rv = s1ap_send_handover_command(source_ue); - ogs_expect(rv == OGS_OK); + s1ap_send_handover_command(source_ue); } void mme_s11_handle_delete_indirect_data_forwarding_tunnel_response( @@ -784,7 +769,7 @@ void mme_s11_handle_delete_indirect_data_forwarding_tunnel_response( } rv = ogs_gtp_xact_commit(xact); - ogs_expect(rv == OGS_OK); + ogs_expect_or_return(rv == OGS_OK); if (rsp->cause.presence) { ogs_gtp_cause_t *cause = rsp->cause.data; diff --git a/src/mme/mme-s6a-handler.c b/src/mme/mme-s6a-handler.c index 448c24808d..848177da39 100644 --- a/src/mme/mme-s6a-handler.c +++ b/src/mme/mme-s6a-handler.c @@ -26,7 +26,6 @@ void mme_s6a_handle_aia(mme_ue_t *mme_ue, ogs_diam_s6a_aia_message_t *aia_message) { - int rv; ogs_diam_e_utran_vector_t *e_utran_vector = NULL; ogs_assert(mme_ue); @@ -41,8 +40,7 @@ void mme_s6a_handle_aia(mme_ue_t *mme_ue, CLEAR_MME_UE_TIMER(mme_ue->t3460); - rv = nas_send_authentication_request(mme_ue, e_utran_vector); - ogs_expect(rv == OGS_OK); + nas_send_authentication_request(mme_ue, e_utran_vector); } void mme_s6a_handle_ula(mme_ue_t *mme_ue, diff --git a/src/mme/mme-sm.c b/src/mme/mme-sm.c index f1c26ab453..bffcd4f0ab 100644 --- a/src/mme/mme-sm.c +++ b/src/mme/mme-sm.c @@ -243,10 +243,9 @@ void mme_state_operational(ogs_fsm_t *s, mme_event_t *e) ogs_fsm_dispatch(&enb->sm, e); } else { ogs_warn("Cannot process S1AP message"); - rv = s1ap_send_error_indication( + s1ap_send_error_indication( enb, NULL, NULL, S1AP_Cause_PR_protocol, S1AP_CauseProtocol_abstract_syntax_error_falsely_constructed_message); - ogs_expect(rv == OGS_OK); } ogs_s1ap_free(&s1ap_message); @@ -269,7 +268,7 @@ void mme_state_operational(ogs_fsm_t *s, mme_event_t *e) pkbuf = e->pkbuf; ogs_assert(pkbuf); if (ogs_nas_emm_decode(&nas_message, pkbuf) != OGS_OK) { - ogs_expect(0); + ogs_error("ogs_nas_emm_decode() failed"); ogs_pkbuf_free(pkbuf); return; } @@ -295,7 +294,7 @@ void mme_state_operational(ogs_fsm_t *s, mme_event_t *e) * not to decrypt NAS message */ h.ciphered = 0; if (nas_security_decode(mme_ue, h, pkbuf) != OGS_OK) { - ogs_expect(0); + ogs_error("nas_security_decode() failed"); ogs_pkbuf_free(pkbuf); return; } @@ -343,7 +342,7 @@ void mme_state_operational(ogs_fsm_t *s, mme_event_t *e) pkbuf = e->pkbuf; ogs_assert(pkbuf); if (ogs_nas_esm_decode(&nas_message, pkbuf) != OGS_OK) { - ogs_expect(0); + ogs_error("ogs_nas_esm_decode() failed"); ogs_pkbuf_free(pkbuf); break; } @@ -358,11 +357,7 @@ void mme_state_operational(ogs_fsm_t *s, mme_event_t *e) sess = bearer->sess; ogs_assert(sess); default_bearer = mme_default_bearer_in_sess(sess); - ogs_expect(default_bearer); - if (!default_bearer) { - ogs_pkbuf_free(pkbuf); - break; - } + ogs_assert(default_bearer); e->bearer = bearer; e->nas_message = &nas_message; @@ -447,7 +442,12 @@ void mme_state_operational(ogs_fsm_t *s, mme_event_t *e) if (mme_ue->nas_eps.type == MME_EPS_TYPE_ATTACH_REQUEST) { rv = nas_send_emm_to_esm(mme_ue, &mme_ue->pdn_connectivity_request); - ogs_expect(rv == OGS_OK); + if (rv != OGS_OK) { + ogs_error("nas_send_emm_to_esm() failed"); + nas_send_attach_reject(mme_ue, + EMM_CAUSE_PROTOCOL_ERROR_UNSPECIFIED, + ESM_CAUSE_PROTOCOL_ERROR_UNSPECIFIED); + } } else { ogs_fatal("Invalid Type[%d]", mme_ue->nas_eps.type); ogs_assert_if_reached(); @@ -455,14 +455,11 @@ void mme_state_operational(ogs_fsm_t *s, mme_event_t *e) } else if (OGS_FSM_CHECK(&mme_ue->sm, emm_state_registered)) { if (mme_ue->nas_eps.type == MME_EPS_TYPE_TAU_REQUEST) { - rv = nas_send_tau_accept(mme_ue, + nas_send_tau_accept(mme_ue, S1AP_ProcedureCode_id_InitialContextSetup); - ogs_expect(rv == OGS_OK); } else if (mme_ue->nas_eps.type == MME_EPS_TYPE_SERVICE_REQUEST) { - rv = s1ap_send_initial_context_setup_request( - mme_ue); - ogs_expect(rv == OGS_OK); + s1ap_send_initial_context_setup_request(mme_ue); } else { ogs_fatal("Invalid Type[%d]", mme_ue->nas_eps.type); ogs_assert_if_reached(); diff --git a/src/mme/nas-path.c b/src/mme/nas-path.c index 21682e6ee6..c7d6dfd26a 100644 --- a/src/mme/nas-path.c +++ b/src/mme/nas-path.c @@ -40,6 +40,7 @@ int nas_send_to_enb(mme_ue_t *mme_ue, ogs_pkbuf_t *pkbuf) int nas_send_emm_to_esm(mme_ue_t *mme_ue, ogs_nas_esm_message_container_t *esm_message_container) { + int rv; ogs_pkbuf_t *esmbuf = NULL; ogs_assert(mme_ue); @@ -54,9 +55,12 @@ int nas_send_emm_to_esm(mme_ue_t *mme_ue, ogs_pkbuf_put_data(esmbuf, esm_message_container->buffer, esm_message_container->length); - ogs_expect(s1ap_send_to_esm(mme_ue, esmbuf) == OGS_OK); + rv = s1ap_send_to_esm(mme_ue, esmbuf); + if (rv != OGS_OK) { + ogs_error("s1ap_send_to_esm() failed"); + } - return OGS_OK; + return rv; } int nas_send_to_downlink_nas_transport(mme_ue_t *mme_ue, ogs_pkbuf_t *pkbuf) @@ -73,17 +77,23 @@ int nas_send_to_downlink_nas_transport(mme_ue_t *mme_ue, ogs_pkbuf_t *pkbuf) ogs_pkbuf_free(pkbuf); } else { - rv = s1ap_build_downlink_nas_transport(&s1apbuf, enb_ue, pkbuf); - ogs_expect(rv == OGS_OK && s1apbuf); + s1apbuf = s1ap_build_downlink_nas_transport(enb_ue, pkbuf); + if (!s1apbuf) { + ogs_error("s1ap_build_downlink_nas_transport() failed"); + return OGS_ERROR; + } rv = nas_send_to_enb(mme_ue, s1apbuf); - ogs_expect(rv == OGS_OK); + if (rv != OGS_OK) { + ogs_error("nas_send_to_enb() failed"); + return OGS_ERROR; + } } return OGS_OK; } -int nas_send_attach_accept(mme_ue_t *mme_ue) +void nas_send_attach_accept(mme_ue_t *mme_ue) { int rv; mme_sess_t *sess = NULL; @@ -99,19 +109,17 @@ int nas_send_attach_accept(mme_ue_t *mme_ue) ogs_assert(bearer); ogs_assert(mme_bearer_next(bearer) == NULL); - rv = esm_build_activate_default_bearer_context_request(&esmbuf, sess); - ogs_expect(rv == OGS_OK && esmbuf); + esmbuf = esm_build_activate_default_bearer_context_request(sess); + ogs_expect_or_return(esmbuf); - rv = emm_build_attach_accept(&emmbuf, mme_ue, esmbuf); - ogs_expect(rv == OGS_OK && emmbuf); + emmbuf = emm_build_attach_accept(mme_ue, esmbuf); + ogs_expect_or_return(emmbuf); - rv = s1ap_build_initial_context_setup_request(&s1apbuf, mme_ue, emmbuf); - ogs_expect(rv == OGS_OK && s1apbuf); + s1apbuf = s1ap_build_initial_context_setup_request(mme_ue, emmbuf); + ogs_expect_or_return(s1apbuf); rv = nas_send_to_enb(mme_ue, s1apbuf); - ogs_expect(rv == OGS_OK); - - return OGS_OK; + ogs_expect_or_return(rv == OGS_OK); } void nas_send_attach_reject(mme_ue_t *mme_ue, @@ -128,19 +136,18 @@ void nas_send_attach_reject(mme_ue_t *mme_ue, sess = mme_sess_first(mme_ue); if (sess) { - rv = esm_build_pdn_connectivity_reject(&esmbuf, sess, esm_cause); - ogs_expect(rv == OGS_OK && esmbuf); + esmbuf = esm_build_pdn_connectivity_reject(sess, esm_cause); + ogs_expect_or_return(esmbuf); } - rv = emm_build_attach_reject(&emmbuf, emm_cause, esmbuf); - ogs_expect(rv == OGS_OK && emmbuf); + emmbuf = emm_build_attach_reject(emm_cause, esmbuf); + ogs_expect_or_return(emmbuf); rv = nas_send_to_downlink_nas_transport(mme_ue, emmbuf); - ogs_expect(rv == OGS_OK); + ogs_expect_or_return(rv == OGS_OK); } -int nas_send_identity_request(mme_ue_t *mme_ue) +void nas_send_identity_request(mme_ue_t *mme_ue) { - int rv; ogs_pkbuf_t *emmbuf = NULL; ogs_assert(mme_ue); @@ -151,21 +158,18 @@ int nas_send_identity_request(mme_ue_t *mme_ue) emmbuf = mme_ue->t3470.pkbuf; } else { - rv = emm_build_identity_request(&emmbuf, mme_ue); - ogs_expect(rv == OGS_OK && emmbuf); + emmbuf = emm_build_identity_request(mme_ue); + ogs_expect_or_return(emmbuf); } mme_ue->t3470.pkbuf = ogs_pkbuf_copy(emmbuf); ogs_timer_start(mme_ue->t3470.timer, mme_timer_cfg(MME_TIMER_T3470)->duration); - rv = nas_send_to_downlink_nas_transport(mme_ue, emmbuf); - ogs_expect(rv == OGS_OK); - - return rv; + nas_send_to_downlink_nas_transport(mme_ue, emmbuf); } -int nas_send_authentication_request( +void nas_send_authentication_request( mme_ue_t *mme_ue, ogs_diam_e_utran_vector_t *e_utran_vector) { int rv; @@ -181,8 +185,8 @@ int nas_send_authentication_request( } else { ogs_assert(e_utran_vector); - rv = emm_build_authentication_request(&emmbuf, e_utran_vector); - ogs_expect(rv == OGS_OK && emmbuf); + emmbuf = emm_build_authentication_request(e_utran_vector); + ogs_expect(emmbuf); } mme_ue->t3460.pkbuf = ogs_pkbuf_copy(emmbuf); @@ -191,11 +195,9 @@ int nas_send_authentication_request( rv = nas_send_to_downlink_nas_transport(mme_ue, emmbuf); ogs_expect(rv == OGS_OK); - - return rv; } -int nas_send_security_mode_command(mme_ue_t *mme_ue) +void nas_send_security_mode_command(mme_ue_t *mme_ue) { int rv; ogs_pkbuf_t *emmbuf = NULL; @@ -209,8 +211,8 @@ int nas_send_security_mode_command(mme_ue_t *mme_ue) emmbuf = mme_ue->t3460.pkbuf; } else { - rv = emm_build_security_mode_command(&emmbuf, mme_ue); - ogs_expect(rv == OGS_OK && emmbuf); + emmbuf = emm_build_security_mode_command(mme_ue); + ogs_expect(emmbuf); } mme_ue->t3460.pkbuf = ogs_pkbuf_copy(emmbuf); @@ -219,11 +221,9 @@ int nas_send_security_mode_command(mme_ue_t *mme_ue) rv = nas_send_to_downlink_nas_transport(mme_ue, emmbuf); ogs_expect(rv == OGS_OK); - - return rv; } -int nas_send_authentication_reject(mme_ue_t *mme_ue) +void nas_send_authentication_reject(mme_ue_t *mme_ue) { int rv; ogs_pkbuf_t *emmbuf = NULL; @@ -233,13 +233,11 @@ int nas_send_authentication_reject(mme_ue_t *mme_ue) ogs_debug("[EMM] Authentication reject"); ogs_debug(" IMSI[%s]", mme_ue->imsi_bcd); - rv = emm_build_authentication_reject(&emmbuf); - ogs_expect(rv == OGS_OK && emmbuf); + emmbuf = emm_build_authentication_reject(); + ogs_expect(emmbuf); rv = nas_send_to_downlink_nas_transport(mme_ue, emmbuf); ogs_expect(rv == OGS_OK); - - return OGS_OK; } void nas_send_detach_accept(mme_ue_t *mme_ue) @@ -254,8 +252,8 @@ void nas_send_detach_accept(mme_ue_t *mme_ue) /* reply with detach accept */ if (mme_ue->nas_eps.detach.switch_off == 0) { int rv; - rv = emm_build_detach_accept(&emmbuf, mme_ue); - ogs_expect(rv == OGS_OK && emmbuf); + emmbuf = emm_build_detach_accept(mme_ue); + ogs_expect(emmbuf); rv = nas_send_to_downlink_nas_transport(mme_ue, emmbuf); ogs_expect(rv == OGS_OK); @@ -267,7 +265,7 @@ void nas_send_detach_accept(mme_ue_t *mme_ue) } -int nas_send_pdn_connectivity_reject( +void nas_send_pdn_connectivity_reject( mme_sess_t *sess, ogs_nas_esm_cause_t esm_cause) { int rv; @@ -279,8 +277,8 @@ int nas_send_pdn_connectivity_reject( ogs_assert(mme_ue); if (OGS_FSM_CHECK(&mme_ue->sm, emm_state_registered)) { - rv = esm_build_pdn_connectivity_reject(&esmbuf, sess, esm_cause); - ogs_expect(rv == OGS_OK && esmbuf); + esmbuf = esm_build_pdn_connectivity_reject(sess, esm_cause); + ogs_expect(esmbuf); rv = nas_send_to_downlink_nas_transport(mme_ue, esmbuf); ogs_expect(rv == OGS_OK); @@ -290,11 +288,9 @@ int nas_send_pdn_connectivity_reject( nas_send_attach_reject(mme_ue, EMM_CAUSE_EPS_SERVICES_AND_NON_EPS_SERVICES_NOT_ALLOWED, esm_cause); } - - return OGS_OK; } -int nas_send_esm_information_request(mme_bearer_t *bearer) +void nas_send_esm_information_request(mme_bearer_t *bearer) { int rv; mme_ue_t *mme_ue = NULL; @@ -307,8 +303,8 @@ int nas_send_esm_information_request(mme_bearer_t *bearer) if (bearer->t3489.pkbuf) { esmbuf = bearer->t3489.pkbuf; } else { - rv = esm_build_information_request(&esmbuf, bearer); - ogs_expect(rv == OGS_OK && esmbuf); + esmbuf = esm_build_information_request(bearer); + ogs_expect(esmbuf); } bearer->t3489.pkbuf = ogs_pkbuf_copy(esmbuf); @@ -317,11 +313,9 @@ int nas_send_esm_information_request(mme_bearer_t *bearer) rv = nas_send_to_downlink_nas_transport(mme_ue, esmbuf); ogs_expect(rv == OGS_OK); - - return OGS_OK; } -int nas_send_activate_default_bearer_context_request(mme_bearer_t *bearer) +void nas_send_activate_default_bearer_context_request(mme_bearer_t *bearer) { int rv; ogs_pkbuf_t *s1apbuf = NULL; @@ -335,19 +329,17 @@ int nas_send_activate_default_bearer_context_request(mme_bearer_t *bearer) mme_ue = bearer->mme_ue; ogs_assert(mme_ue); - rv = esm_build_activate_default_bearer_context_request(&esmbuf, sess); - ogs_expect(rv == OGS_OK && esmbuf); + esmbuf = esm_build_activate_default_bearer_context_request(sess); + ogs_expect(esmbuf); - rv = s1ap_build_e_rab_setup_request(&s1apbuf, bearer, esmbuf); - ogs_expect(rv == OGS_OK && s1apbuf); + s1apbuf = s1ap_build_e_rab_setup_request(bearer, esmbuf); + ogs_expect_or_return(s1apbuf); rv = nas_send_to_enb(mme_ue, s1apbuf); ogs_expect(rv == OGS_OK); - - return OGS_OK; } -int nas_send_activate_dedicated_bearer_context_request( +void nas_send_activate_dedicated_bearer_context_request( mme_bearer_t *bearer) { int rv; @@ -359,37 +351,29 @@ int nas_send_activate_dedicated_bearer_context_request( mme_ue = bearer->mme_ue; ogs_assert(mme_ue); - rv = esm_build_activate_dedicated_bearer_context_request(&esmbuf, bearer); - ogs_expect(rv == OGS_OK && esmbuf); + esmbuf = esm_build_activate_dedicated_bearer_context_request(bearer); + ogs_expect(esmbuf); - rv = s1ap_build_e_rab_setup_request(&s1apbuf, bearer, esmbuf); - ogs_expect(rv == OGS_OK && s1apbuf); + s1apbuf = s1ap_build_e_rab_setup_request(bearer, esmbuf); + ogs_expect_or_return(s1apbuf); rv = nas_send_to_enb(mme_ue, s1apbuf); ogs_expect(rv == OGS_OK); - - return OGS_OK; } -int nas_send_activate_all_dedicated_bearers(mme_bearer_t *default_bearer) +void nas_send_activate_all_dedicated_bearers(mme_bearer_t *default_bearer) { - int rv; - ogs_assert(default_bearer); mme_bearer_t *dedicated_bearer = mme_bearer_next(default_bearer); while (dedicated_bearer) { - rv = nas_send_activate_dedicated_bearer_context_request( + nas_send_activate_dedicated_bearer_context_request( dedicated_bearer); - ogs_expect(rv == OGS_OK); - dedicated_bearer = mme_bearer_next(dedicated_bearer); } - - return OGS_OK; } -int nas_send_modify_bearer_context_request( +void nas_send_modify_bearer_context_request( mme_bearer_t *bearer, int qos_presence, int tft_presence) { int rv; @@ -401,13 +385,13 @@ int nas_send_modify_bearer_context_request( mme_ue = bearer->mme_ue; ogs_assert(mme_ue); - rv = esm_build_modify_bearer_context_request( - &esmbuf, bearer, qos_presence, tft_presence); - ogs_expect(rv == OGS_OK && esmbuf); + esmbuf = esm_build_modify_bearer_context_request( + bearer, qos_presence, tft_presence); + ogs_expect(esmbuf); if (qos_presence == 1) { - rv = s1ap_build_e_rab_modify_request(&s1apbuf, bearer, esmbuf); - ogs_expect(rv == OGS_OK && s1apbuf); + s1apbuf = s1ap_build_e_rab_modify_request(bearer, esmbuf); + ogs_expect_or_return(s1apbuf); rv = nas_send_to_enb(mme_ue, s1apbuf); ogs_expect(rv == OGS_OK); @@ -415,11 +399,9 @@ int nas_send_modify_bearer_context_request( rv = nas_send_to_downlink_nas_transport(mme_ue, esmbuf); ogs_expect(rv == OGS_OK); } - - return OGS_OK; } -int nas_send_deactivate_bearer_context_request(mme_bearer_t *bearer) +void nas_send_deactivate_bearer_context_request(mme_bearer_t *bearer) { int rv; ogs_pkbuf_t *s1apbuf = NULL; @@ -430,21 +412,19 @@ int nas_send_deactivate_bearer_context_request(mme_bearer_t *bearer) mme_ue = bearer->mme_ue; ogs_assert(mme_ue); - rv = esm_build_deactivate_bearer_context_request( - &esmbuf, bearer, ESM_CAUSE_REGULAR_DEACTIVATION); - ogs_expect(rv == OGS_OK && esmbuf); + esmbuf = esm_build_deactivate_bearer_context_request( + bearer, ESM_CAUSE_REGULAR_DEACTIVATION); + ogs_expect(esmbuf); - rv = s1ap_build_e_rab_release_command(&s1apbuf, bearer, esmbuf, + s1apbuf = s1ap_build_e_rab_release_command(bearer, esmbuf, S1AP_Cause_PR_nas, S1AP_CauseNas_normal_release); - ogs_expect(rv == OGS_OK && s1apbuf); + ogs_expect_or_return(s1apbuf); rv = nas_send_to_enb(mme_ue, s1apbuf); ogs_expect(rv == OGS_OK); - - return OGS_OK; } -int nas_send_tau_accept( +void nas_send_tau_accept( mme_ue_t *mme_ue, S1AP_ProcedureCode_t procedureCode) { int rv; @@ -455,13 +435,13 @@ int nas_send_tau_accept( ogs_debug("[EMM] Tracking area update accept"); ogs_debug(" IMSI[%s]", mme_ue->imsi_bcd); - rv = emm_build_tau_accept(&emmbuf, mme_ue); - ogs_expect(rv == OGS_OK); + emmbuf = emm_build_tau_accept(mme_ue); + ogs_expect(emmbuf); if (procedureCode == S1AP_ProcedureCode_id_InitialContextSetup) { ogs_pkbuf_t *s1apbuf = NULL; - rv = s1ap_build_initial_context_setup_request(&s1apbuf, mme_ue, emmbuf); - ogs_expect(rv == OGS_OK && s1apbuf); + s1apbuf = s1ap_build_initial_context_setup_request(mme_ue, emmbuf); + ogs_expect_or_return(s1apbuf); rv = nas_send_to_enb(mme_ue, s1apbuf); ogs_expect(rv == OGS_OK); @@ -470,11 +450,9 @@ int nas_send_tau_accept( ogs_expect(rv == OGS_OK); } else ogs_assert_if_reached(); - - return rv; } -int nas_send_tau_reject(mme_ue_t *mme_ue, ogs_nas_emm_cause_t emm_cause) +void nas_send_tau_reject(mme_ue_t *mme_ue, ogs_nas_emm_cause_t emm_cause) { int rv; ogs_pkbuf_t *emmbuf = NULL; @@ -482,13 +460,11 @@ int nas_send_tau_reject(mme_ue_t *mme_ue, ogs_nas_emm_cause_t emm_cause) ogs_assert(mme_ue); /* Build TAU reject */ - rv = emm_build_tau_reject(&emmbuf, emm_cause, mme_ue); - ogs_expect(rv == OGS_OK); + emmbuf = emm_build_tau_reject(emm_cause, mme_ue); + ogs_expect(emmbuf); rv = nas_send_to_downlink_nas_transport(mme_ue, emmbuf); ogs_expect(rv == OGS_OK); - - return OGS_OK; } void nas_send_service_reject(mme_ue_t *mme_ue, @@ -500,14 +476,14 @@ void nas_send_service_reject(mme_ue_t *mme_ue, ogs_assert(mme_ue); /* Build Service Reject */ - rv = emm_build_service_reject(&emmbuf, emm_cause, mme_ue); - ogs_expect(rv == OGS_OK); + emmbuf = emm_build_service_reject(emm_cause, mme_ue); + ogs_expect(emmbuf); rv = nas_send_to_downlink_nas_transport(mme_ue, emmbuf); ogs_expect(rv == OGS_OK); } -int nas_send_cs_service_notification(mme_ue_t *mme_ue) +void nas_send_cs_service_notification(mme_ue_t *mme_ue) { int rv; ogs_pkbuf_t *emmbuf = NULL; @@ -517,16 +493,14 @@ int nas_send_cs_service_notification(mme_ue_t *mme_ue) ogs_debug("[EMM] CS Service Notification"); ogs_debug(" IMSI[%s]", mme_ue->imsi_bcd); - rv = emm_build_cs_service_notification(&emmbuf, mme_ue); - ogs_expect(rv == OGS_OK && emmbuf); + emmbuf = emm_build_cs_service_notification(mme_ue); + ogs_expect(emmbuf); rv = nas_send_to_downlink_nas_transport(mme_ue, emmbuf); ogs_expect(rv == OGS_OK); - - return OGS_OK; } -int nas_send_downlink_nas_transport( +void nas_send_downlink_nas_transport( mme_ue_t *mme_ue, uint8_t *buffer, uint8_t length) { int rv; @@ -539,11 +513,9 @@ int nas_send_downlink_nas_transport( ogs_debug("[EMM] Downlink NAS transport"); ogs_debug(" IMSI[%s]", mme_ue->imsi_bcd); - rv = emm_build_downlink_nas_transport(&emmbuf, mme_ue, buffer, length); - ogs_expect(rv == OGS_OK && emmbuf); + emmbuf = emm_build_downlink_nas_transport(mme_ue, buffer, length); + ogs_expect(emmbuf); rv = nas_send_to_downlink_nas_transport(mme_ue, emmbuf); ogs_expect(rv == OGS_OK); - - return OGS_OK; } diff --git a/src/mme/nas-path.h b/src/mme/nas-path.h index 5c5ae2cfbc..b1bded4464 100644 --- a/src/mme/nas-path.h +++ b/src/mme/nas-path.h @@ -31,37 +31,37 @@ int nas_send_emm_to_esm( mme_ue_t *mme_ue, ogs_nas_esm_message_container_t *esm_message_container); int nas_send_to_downlink_nas_transport(mme_ue_t *mme_ue, ogs_pkbuf_t *pkbuf); -int nas_send_attach_accept(mme_ue_t *mme_ue); +void nas_send_attach_accept(mme_ue_t *mme_ue); void nas_send_attach_reject(mme_ue_t *mme_ue, ogs_nas_emm_cause_t emm_cause, ogs_nas_esm_cause_t esm_cause); -int nas_send_identity_request(mme_ue_t *mme_ue); +void nas_send_identity_request(mme_ue_t *mme_ue); -int nas_send_authentication_request( +void nas_send_authentication_request( mme_ue_t *mme_ue, ogs_diam_e_utran_vector_t *e_utran_vector); -int nas_send_authentication_reject(mme_ue_t *mme_ue); +void nas_send_authentication_reject(mme_ue_t *mme_ue); -int nas_send_security_mode_command(mme_ue_t *mme_ue); +void nas_send_security_mode_command(mme_ue_t *mme_ue); void nas_send_detach_accept(mme_ue_t *mme_ue); -int nas_send_pdn_connectivity_reject( +void nas_send_pdn_connectivity_reject( mme_sess_t *sess, ogs_nas_esm_cause_t esm_cause); -int nas_send_esm_information_request(mme_bearer_t *bearer); -int nas_send_activate_default_bearer_context_request(mme_bearer_t *bearer); -int nas_send_activate_dedicated_bearer_context_request(mme_bearer_t *bearer); -int nas_send_activate_all_dedicated_bearers(mme_bearer_t *default_bearer); -int nas_send_modify_bearer_context_request( +void nas_send_esm_information_request(mme_bearer_t *bearer); +void nas_send_activate_default_bearer_context_request(mme_bearer_t *bearer); +void nas_send_activate_dedicated_bearer_context_request(mme_bearer_t *bearer); +void nas_send_activate_all_dedicated_bearers(mme_bearer_t *default_bearer); +void nas_send_modify_bearer_context_request( mme_bearer_t *bearer, int qos_presence, int tft_presence); -int nas_send_deactivate_bearer_context_request(mme_bearer_t *bearer); +void nas_send_deactivate_bearer_context_request(mme_bearer_t *bearer); -int nas_send_tau_accept(mme_ue_t *mme_ue, S1AP_ProcedureCode_t procedureCode); -int nas_send_tau_reject(mme_ue_t *mme_ue, ogs_nas_esm_cause_t emm_cause); +void nas_send_tau_accept(mme_ue_t *mme_ue, S1AP_ProcedureCode_t procedureCode); +void nas_send_tau_reject(mme_ue_t *mme_ue, ogs_nas_esm_cause_t emm_cause); void nas_send_service_reject(mme_ue_t *mme_ue, ogs_nas_emm_cause_t emm_cause); -int nas_send_cs_service_notification(mme_ue_t *mme_ue); -int nas_send_downlink_nas_transport( +void nas_send_cs_service_notification(mme_ue_t *mme_ue); +void nas_send_downlink_nas_transport( mme_ue_t *mme_ue, uint8_t *buffer, uint8_t length); #ifdef __cplusplus diff --git a/src/mme/nas-security.c b/src/mme/nas-security.c index c4dd6b2da7..c0398eeb02 100644 --- a/src/mme/nas-security.c +++ b/src/mme/nas-security.c @@ -19,8 +19,8 @@ #include "nas-security.h" -int nas_security_encode( - ogs_pkbuf_t **pkbuf, mme_ue_t *mme_ue, ogs_nas_message_t *message) +ogs_pkbuf_t *nas_security_encode( + mme_ue_t *mme_ue, ogs_nas_message_t *message) { int integrity_protected = 0; int new_security_context = 0; @@ -31,7 +31,7 @@ int nas_security_encode( switch (message->h.security_header_type) { case OGS_NAS_SECURITY_HEADER_PLAIN_NAS_MESSAGE: - return ogs_nas_plain_encode(pkbuf, message); + return ogs_nas_plain_encode(message); case OGS_NAS_SECURITY_HEADER_INTEGRITY_PROTECTED: integrity_protected = 1; break; @@ -49,9 +49,9 @@ int nas_security_encode( ciphered = 1; break; default: - ogs_warn("Not implemented(securiry header type:0x%x)", + ogs_error("Not implemented(securiry header type:0x%x)", message->h.security_header_type); - return OGS_ERROR; + return NULL; } if (new_security_context) { @@ -73,9 +73,10 @@ int nas_security_encode( h.protocol_discriminator = message->h.protocol_discriminator; h.sequence_number = (mme_ue->dl_count & 0xff); - if (ogs_nas_plain_encode(&new, message) != OGS_OK) { - ogs_error("Error encoding plaintext NAS"); - return OGS_ERROR; + new = ogs_nas_plain_encode(message); + if (!new) { + ogs_error("ogs_nas_plain_encode() failed"); + return NULL; } if (ciphered) { @@ -106,12 +107,14 @@ int nas_security_encode( ogs_assert(ogs_pkbuf_push(new, 5)); memcpy(new->data, &h, sizeof(ogs_nas_security_header_t)); - *pkbuf = new; - mme_ue->security_context_available = 1; + + return new; } - return OGS_OK; + ogs_error("Invalid param : type[%d] ciphered[%d] integrity_protected[%d]", + message->h.security_header_type, ciphered, integrity_protected); + return NULL; } int nas_security_decode(mme_ue_t *mme_ue, diff --git a/src/mme/nas-security.h b/src/mme/nas-security.h index b7115b1f8f..adf272feed 100644 --- a/src/mme/nas-security.h +++ b/src/mme/nas-security.h @@ -46,8 +46,8 @@ typedef struct _nas_security_header_type_t { }; } __attribute__ ((packed)) nas_security_header_type_t; -int nas_security_encode( - ogs_pkbuf_t **pkbuf, mme_ue_t *mme_ue, ogs_nas_message_t *message); +ogs_pkbuf_t *nas_security_encode( + mme_ue_t *mme_ue, ogs_nas_message_t *message); int nas_security_decode(mme_ue_t *mme_ue, nas_security_header_type_t security_header_type, ogs_pkbuf_t *pkbuf); diff --git a/src/mme/s1ap-build.c b/src/mme/s1ap-build.c index 473231c997..7f8c5d45aa 100644 --- a/src/mme/s1ap-build.c +++ b/src/mme/s1ap-build.c @@ -23,9 +23,8 @@ #include "mme-sm.h" #include "s1ap-build.h" -int s1ap_build_setup_rsp(ogs_pkbuf_t **pkbuf) +ogs_pkbuf_t *s1ap_build_setup_rsp(void) { - int rv; int i, j; S1AP_S1AP_PDU_t pdu; @@ -110,22 +109,12 @@ int s1ap_build_setup_rsp(ogs_pkbuf_t **pkbuf) *RelativeMMECapacity = mme_self()->relative_capacity; - rv = ogs_s1ap_encode(pkbuf, &pdu); - ogs_s1ap_free(&pdu); - - if (rv != OGS_OK) { - ogs_error("ogs_s1ap_encode() failed"); - return OGS_ERROR; - } - - return OGS_OK; + return ogs_s1ap_encode(&pdu); } -int s1ap_build_setup_failure( - ogs_pkbuf_t **pkbuf, S1AP_Cause_PR group, long cause, long time_to_wait) +ogs_pkbuf_t *s1ap_build_setup_failure( + S1AP_Cause_PR group, long cause, long time_to_wait) { - int rv; - S1AP_S1AP_PDU_t pdu; S1AP_UnsuccessfulOutcome_t *unsuccessfulOutcome = NULL; S1AP_S1SetupFailure_t *S1SetupFailure = NULL; @@ -176,22 +165,12 @@ int s1ap_build_setup_failure( if (TimeToWait) *TimeToWait = time_to_wait; - rv = ogs_s1ap_encode(pkbuf, &pdu); - ogs_s1ap_free(&pdu); - - if (rv != OGS_OK) { - ogs_error("ogs_s1ap_encode() failed"); - return OGS_ERROR; - } - - return OGS_OK; + return ogs_s1ap_encode(&pdu); } -int s1ap_build_downlink_nas_transport( - ogs_pkbuf_t **s1apbuf, enb_ue_t *enb_ue, ogs_pkbuf_t *emmbuf) +ogs_pkbuf_t *s1ap_build_downlink_nas_transport( + enb_ue_t *enb_ue, ogs_pkbuf_t *emmbuf) { - int rv; - S1AP_S1AP_PDU_t pdu; S1AP_InitiatingMessage_t *initiatingMessage = NULL; S1AP_DownlinkNASTransport_t *DownlinkNASTransport = NULL; @@ -259,19 +238,11 @@ int s1ap_build_downlink_nas_transport( memcpy(NAS_PDU->buf, emmbuf->data, NAS_PDU->size); ogs_pkbuf_free(emmbuf); - rv = ogs_s1ap_encode(s1apbuf, &pdu); - ogs_s1ap_free(&pdu); - - if (rv != OGS_OK) { - ogs_error("ogs_s1ap_encode() failed"); - return OGS_ERROR; - } - - return OGS_OK; + return ogs_s1ap_encode(&pdu); } -int s1ap_build_initial_context_setup_request( - ogs_pkbuf_t **s1apbuf, mme_ue_t *mme_ue, ogs_pkbuf_t *emmbuf) +ogs_pkbuf_t *s1ap_build_initial_context_setup_request( + mme_ue_t *mme_ue, ogs_pkbuf_t *emmbuf) { int rv; @@ -548,22 +519,11 @@ int s1ap_build_initial_context_setup_request( UERadioCapability); } - rv = ogs_s1ap_encode(s1apbuf, &pdu); - ogs_s1ap_free(&pdu); - - if (rv != OGS_OK) { - ogs_error("ogs_s1ap_encode() failed"); - return OGS_ERROR; - } - - return OGS_OK; + return ogs_s1ap_encode(&pdu); } -int s1ap_build_ue_context_modification_request( - ogs_pkbuf_t **s1apbuf, mme_ue_t *mme_ue) +ogs_pkbuf_t *s1ap_build_ue_context_modification_request(mme_ue_t *mme_ue) { - int rv; - S1AP_S1AP_PDU_t pdu; S1AP_InitiatingMessage_t *initiatingMessage = NULL; S1AP_UEContextModificationRequest_t *UEContextModificationRequest = NULL; @@ -702,22 +662,12 @@ int s1ap_build_ue_context_modification_request( memcpy(SecurityKey->buf, mme_ue->kenb, SecurityKey->size); } - rv = ogs_s1ap_encode(s1apbuf, &pdu); - ogs_s1ap_free(&pdu); - - if (rv != OGS_OK) { - ogs_error("ogs_s1ap_encode() failed"); - return OGS_ERROR; - } - - return OGS_OK; + return ogs_s1ap_encode(&pdu); } -int s1ap_build_ue_context_release_command( - ogs_pkbuf_t **s1apbuf, enb_ue_t *enb_ue, S1AP_Cause_PR group, long cause) +ogs_pkbuf_t *s1ap_build_ue_context_release_command( + enb_ue_t *enb_ue, S1AP_Cause_PR group, long cause) { - int rv; - S1AP_S1AP_PDU_t pdu; S1AP_InitiatingMessage_t *initiatingMessage = NULL; S1AP_UEContextReleaseCommand_t *UEContextReleaseCommand = NULL; @@ -730,7 +680,7 @@ int s1ap_build_ue_context_release_command( if (enb_ue->mme_ue_s1ap_id == 0) { ogs_error("invalid mme ue s1ap id"); - return OGS_ERROR; + return NULL; } memset(&pdu, 0, sizeof (S1AP_S1AP_PDU_t)); @@ -781,20 +731,12 @@ int s1ap_build_ue_context_release_command( Cause->present = group; Cause->choice.radioNetwork = cause; - rv = ogs_s1ap_encode(s1apbuf, &pdu); - ogs_s1ap_free(&pdu); - - if (rv != OGS_OK) { - ogs_error("ogs_s1ap_encode() failed"); - return OGS_ERROR; - } - - return OGS_OK; + return ogs_s1ap_encode(&pdu); } -int s1ap_build_e_rab_setup_request( - ogs_pkbuf_t **s1apbuf, mme_bearer_t *bearer, ogs_pkbuf_t *esmbuf) +ogs_pkbuf_t *s1ap_build_e_rab_setup_request( + mme_bearer_t *bearer, ogs_pkbuf_t *esmbuf) { int rv; @@ -927,22 +869,12 @@ int s1ap_build_e_rab_setup_request( memcpy(nasPdu->buf, esmbuf->data, nasPdu->size); ogs_pkbuf_free(esmbuf); - rv = ogs_s1ap_encode(s1apbuf, &pdu); - ogs_s1ap_free(&pdu); - - if (rv != OGS_OK) { - ogs_error("ogs_s1ap_encode() failed"); - return OGS_ERROR; - } - - return OGS_OK; + return ogs_s1ap_encode(&pdu); } -int s1ap_build_e_rab_modify_request( - ogs_pkbuf_t **s1apbuf, mme_bearer_t *bearer, ogs_pkbuf_t *esmbuf) +ogs_pkbuf_t *s1ap_build_e_rab_modify_request( + mme_bearer_t *bearer, ogs_pkbuf_t *esmbuf) { - int rv; - S1AP_S1AP_PDU_t pdu; S1AP_InitiatingMessage_t *initiatingMessage = NULL; S1AP_E_RABModifyRequest_t *E_RABModifyRequest = NULL; @@ -1069,23 +1001,13 @@ int s1ap_build_e_rab_modify_request( memcpy(nasPdu->buf, esmbuf->data, nasPdu->size); ogs_pkbuf_free(esmbuf); - rv = ogs_s1ap_encode(s1apbuf, &pdu); - ogs_s1ap_free(&pdu); - - if (rv != OGS_OK) { - ogs_error("ogs_s1ap_encode() failed"); - return OGS_ERROR; - } - - return OGS_OK; + return ogs_s1ap_encode(&pdu); } -int s1ap_build_e_rab_release_command(ogs_pkbuf_t **s1apbuf, +ogs_pkbuf_t *s1ap_build_e_rab_release_command( mme_bearer_t *bearer, ogs_pkbuf_t *esmbuf, S1AP_Cause_PR group, long cause) { - int rv; - S1AP_S1AP_PDU_t pdu; S1AP_InitiatingMessage_t *initiatingMessage = NULL; S1AP_E_RABReleaseCommand_t *E_RABReleaseCommand = NULL; @@ -1209,22 +1131,12 @@ int s1ap_build_e_rab_release_command(ogs_pkbuf_t **s1apbuf, memcpy(nasPdu->buf, esmbuf->data, nasPdu->size); ogs_pkbuf_free(esmbuf); - rv = ogs_s1ap_encode(s1apbuf, &pdu); - ogs_s1ap_free(&pdu); - - if (rv != OGS_OK) { - ogs_error("ogs_s1ap_encode() failed"); - return OGS_ERROR; - } - - return OGS_OK; + return ogs_s1ap_encode(&pdu); } -int s1ap_build_paging(ogs_pkbuf_t **s1apbuf, +ogs_pkbuf_t *s1ap_build_paging( mme_ue_t *mme_ue, S1AP_CNDomain_t cn_domain) { - int rv; - S1AP_S1AP_PDU_t pdu; S1AP_InitiatingMessage_t *initiatingMessage = NULL; S1AP_Paging_t *Paging = NULL; @@ -1342,19 +1254,10 @@ int s1ap_build_paging(ogs_pkbuf_t **s1apbuf, &tai_item->tAI.pLMNidentity); ogs_s1ap_uint16_to_OCTET_STRING(mme_ue->tai.tac, &tai_item->tAI.tAC); - rv = ogs_s1ap_encode(s1apbuf, &pdu); - ogs_s1ap_free(&pdu); - - if (rv != OGS_OK) { - ogs_error("ogs_s1ap_encode() failed"); - return OGS_ERROR; - } - - return OGS_OK; + return ogs_s1ap_encode(&pdu); } -int s1ap_build_mme_configuration_transfer( - ogs_pkbuf_t **s1apbuf, +ogs_pkbuf_t *s1ap_build_mme_configuration_transfer( S1AP_SONConfigurationTransfer_t *son_configuration_transfer) { int rv; @@ -1366,7 +1269,6 @@ int s1ap_build_mme_configuration_transfer( S1AP_MMEConfigurationTransferIEs_t *ie = NULL; S1AP_SONConfigurationTransfer_t *SONConfigurationTransfer = NULL; - ogs_assert(s1apbuf); ogs_assert(son_configuration_transfer); ogs_debug("[MME] MME Configuration Transfer"); @@ -1400,21 +1302,11 @@ int s1ap_build_mme_configuration_transfer( son_configuration_transfer, SONConfigurationTransfer); ogs_assert(rv == OGS_OK); - rv = ogs_s1ap_encode(s1apbuf, &pdu); - ogs_s1ap_free(&pdu); - - if (rv != OGS_OK) { - ogs_error("ogs_s1ap_encode() failed"); - return OGS_ERROR; - } - - return OGS_OK; + return ogs_s1ap_encode(&pdu); } -int s1ap_build_path_switch_ack(ogs_pkbuf_t **s1apbuf, mme_ue_t *mme_ue) +ogs_pkbuf_t *s1ap_build_path_switch_ack(mme_ue_t *mme_ue) { - int rv; - S1AP_S1AP_PDU_t pdu; S1AP_SuccessfulOutcome_t *successfulOutcome = NULL; S1AP_PathSwitchRequestAcknowledge_t *PathSwitchRequestAcknowledge = NULL; @@ -1491,23 +1383,13 @@ int s1ap_build_path_switch_ack(ogs_pkbuf_t **s1apbuf, mme_ue_t *mme_ue) memcpy(SecurityContext->nextHopParameter.buf, mme_ue->nh, SecurityContext->nextHopParameter.size); - rv = ogs_s1ap_encode(s1apbuf, &pdu); - ogs_s1ap_free(&pdu); - - if (rv != OGS_OK) { - ogs_error("ogs_s1ap_encode() failed"); - return OGS_ERROR; - } - - return OGS_OK; + return ogs_s1ap_encode(&pdu); } -int s1ap_build_path_switch_failure(ogs_pkbuf_t **s1apbuf, +ogs_pkbuf_t *s1ap_build_path_switch_failure( uint32_t enb_ue_s1ap_id, uint32_t mme_ue_s1ap_id, S1AP_Cause_PR group, long cause) { - int rv; - S1AP_S1AP_PDU_t pdu; S1AP_UnsuccessfulOutcome_t *unsuccessfulOutcome = NULL; S1AP_PathSwitchRequestFailure_t *PathSwitchRequestFailure = NULL; @@ -1572,18 +1454,10 @@ int s1ap_build_path_switch_failure(ogs_pkbuf_t **s1apbuf, Cause->present = group; Cause->choice.radioNetwork = cause; - rv = ogs_s1ap_encode(s1apbuf, &pdu); - ogs_s1ap_free(&pdu); - - if (rv != OGS_OK) { - ogs_error("ogs_s1ap_encode() failed"); - return OGS_ERROR; - } - - return OGS_OK; + return ogs_s1ap_encode(&pdu); } -int s1ap_build_handover_command(ogs_pkbuf_t **s1apbuf, enb_ue_t *source_ue) +ogs_pkbuf_t *s1ap_build_handover_command(enb_ue_t *source_ue) { int rv; @@ -1749,22 +1623,12 @@ int s1ap_build_handover_command(ogs_pkbuf_t **s1apbuf, enb_ue_t *source_ue) ogs_s1ap_buffer_to_OCTET_STRING(mme_ue->container.buf, mme_ue->container.size, Target_ToSource_TransparentContainer); - rv = ogs_s1ap_encode(s1apbuf, &pdu); - ogs_s1ap_free(&pdu); - - if (rv != OGS_OK) { - ogs_error("ogs_s1ap_encode() failed"); - return OGS_ERROR; - } - - return OGS_OK; + return ogs_s1ap_encode(&pdu); } -int s1ap_build_handover_preparation_failure( - ogs_pkbuf_t **s1apbuf, enb_ue_t *source_ue, S1AP_Cause_t *cause) +ogs_pkbuf_t *s1ap_build_handover_preparation_failure( + enb_ue_t *source_ue, S1AP_Cause_t *cause) { - int rv; - S1AP_S1AP_PDU_t pdu; S1AP_UnsuccessfulOutcome_t *unsuccessfulOutcome = NULL; S1AP_HandoverPreparationFailure_t *HandoverPreparationFailure = NULL; @@ -1774,7 +1638,6 @@ int s1ap_build_handover_preparation_failure( S1AP_ENB_UE_S1AP_ID_t *ENB_UE_S1AP_ID = NULL; S1AP_Cause_t *Cause = NULL; - ogs_assert(s1apbuf); ogs_assert(source_ue); ogs_assert(cause); @@ -1834,19 +1697,11 @@ int s1ap_build_handover_preparation_failure( Cause->present = cause->present; Cause->choice.radioNetwork = cause->choice.radioNetwork; - rv = ogs_s1ap_encode(s1apbuf, &pdu); - ogs_s1ap_free(&pdu); - - if (rv != OGS_OK) { - ogs_error("ogs_s1ap_encode() failed"); - return OGS_ERROR; - } - - return OGS_OK; + return ogs_s1ap_encode(&pdu); } -int s1ap_build_handover_request( - ogs_pkbuf_t **s1apbuf, mme_ue_t *mme_ue, enb_ue_t *target_ue, +ogs_pkbuf_t *s1ap_build_handover_request( + mme_ue_t *mme_ue, enb_ue_t *target_ue, S1AP_ENB_UE_S1AP_ID_t *enb_ue_s1ap_id, S1AP_MME_UE_S1AP_ID_t *mme_ue_s1ap_id, S1AP_HandoverType_t *handovertype, @@ -2086,21 +1941,11 @@ int s1ap_build_handover_request( memcpy(SecurityContext->nextHopParameter.buf, mme_ue->nh, SecurityContext->nextHopParameter.size); - rv = ogs_s1ap_encode(s1apbuf, &pdu); - ogs_s1ap_free(&pdu); - - if (rv != OGS_OK) { - ogs_error("ogs_s1ap_encode() failed"); - return OGS_ERROR; - } - - return OGS_OK; + return ogs_s1ap_encode(&pdu); } -int s1ap_build_handover_cancel_ack(ogs_pkbuf_t **s1apbuf, enb_ue_t *source_ue) +ogs_pkbuf_t *s1ap_build_handover_cancel_ack(enb_ue_t *source_ue) { - int rv; - S1AP_S1AP_PDU_t pdu; S1AP_SuccessfulOutcome_t *successfulOutcome = NULL; S1AP_HandoverCancelAcknowledge_t *HandoverCancelAcknowledge = NULL; @@ -2153,18 +1998,10 @@ int s1ap_build_handover_cancel_ack(ogs_pkbuf_t **s1apbuf, enb_ue_t *source_ue) ogs_debug(" Source : ENB_UE_S1AP_ID[%d] MME_UE_S1AP_ID[%d]", source_ue->enb_ue_s1ap_id, source_ue->mme_ue_s1ap_id); - rv = ogs_s1ap_encode(s1apbuf, &pdu); - ogs_s1ap_free(&pdu); - - if (rv != OGS_OK) { - ogs_error("ogs_s1ap_encode() failed"); - return OGS_ERROR; - } - - return OGS_OK; + return ogs_s1ap_encode(&pdu); } -int s1ap_build_mme_status_transfer(ogs_pkbuf_t **s1apbuf, +ogs_pkbuf_t *s1ap_build_mme_status_transfer( enb_ue_t *target_ue, S1AP_ENB_StatusTransfer_TransparentContainer_t *enb_statustransfer_transparentContainer) @@ -2240,25 +2077,14 @@ int s1ap_build_mme_status_transfer(ogs_pkbuf_t **s1apbuf, ENB_StatusTransfer_TransparentContainer); ogs_assert(rv == OGS_OK); - rv = ogs_s1ap_encode(s1apbuf, &pdu); - ogs_s1ap_free(&pdu); - - if (rv != OGS_OK) { - ogs_error("ogs_s1ap_encode() failed"); - return OGS_ERROR; - } - - return OGS_OK; + return ogs_s1ap_encode(&pdu); } -int s1ap_build_error_indication( - ogs_pkbuf_t **s1apbuf, +ogs_pkbuf_t *s1ap_build_error_indication( S1AP_MME_UE_S1AP_ID_t *mme_ue_s1ap_id, S1AP_ENB_UE_S1AP_ID_t *enb_ue_s1ap_id, S1AP_Cause_PR group, long cause) { - int rv; - S1AP_S1AP_PDU_t pdu; S1AP_InitiatingMessage_t *initiatingMessage = NULL; S1AP_ErrorIndication_t *ErrorIndication = NULL; @@ -2326,24 +2152,13 @@ int s1ap_build_error_indication( ogs_debug(" Group[%d] Cause[%d]", Cause->present, (int)Cause->choice.radioNetwork); - rv = ogs_s1ap_encode(s1apbuf, &pdu); - ogs_s1ap_free(&pdu); - - if (rv != OGS_OK) { - ogs_error("ogs_s1ap_encode() failed"); - return OGS_ERROR; - } - - return OGS_OK; + return ogs_s1ap_encode(&pdu); } -int s1ap_build_s1_reset( - ogs_pkbuf_t **s1apbuf, +ogs_pkbuf_t *s1ap_build_s1_reset( S1AP_Cause_PR group, long cause, S1AP_UE_associatedLogicalS1_ConnectionListRes_t *partOfS1_Interface) { - int rv; - S1AP_S1AP_PDU_t pdu; S1AP_InitiatingMessage_t *initiatingMessage = NULL; S1AP_Reset_t *Reset = NULL; @@ -2399,19 +2214,10 @@ int s1ap_build_s1_reset( ResetType->choice.s1_Interface = S1AP_ResetAll_reset_all; } - rv = ogs_s1ap_encode(s1apbuf, &pdu); - ogs_s1ap_free(&pdu); - - if (rv != OGS_OK) { - ogs_error("ogs_s1ap_encode() failed"); - return OGS_ERROR; - } - - return OGS_OK; + return ogs_s1ap_encode(&pdu); } -int s1ap_build_s1_reset_partial( - ogs_pkbuf_t **s1apbuf, +ogs_pkbuf_t *s1ap_build_s1_reset_partial( S1AP_Cause_PR group, long cause, S1AP_MME_UE_S1AP_ID_t *mme_ue_s1ap_id, S1AP_ENB_UE_S1AP_ID_t *enb_ue_s1ap_id) @@ -2436,15 +2242,12 @@ int s1ap_build_s1_reset_partial( item->mME_UE_S1AP_ID = mme_ue_s1ap_id; item->eNB_UE_S1AP_ID = enb_ue_s1ap_id; - return s1ap_build_s1_reset(s1apbuf, group, cause, partOfS1_Interface); + return s1ap_build_s1_reset(group, cause, partOfS1_Interface); } -int s1ap_build_s1_reset_ack( - ogs_pkbuf_t **s1apbuf, +ogs_pkbuf_t *s1ap_build_s1_reset_ack( S1AP_UE_associatedLogicalS1_ConnectionListRes_t *partOfS1_Interface) { - int rv; - S1AP_S1AP_PDU_t pdu; S1AP_SuccessfulOutcome_t *successfulOutcome = NULL; S1AP_ResetAcknowledge_t *ResetAcknowledge = NULL; @@ -2533,22 +2336,11 @@ int s1ap_build_s1_reset_ack( } } - rv = ogs_s1ap_encode(s1apbuf, &pdu); - ogs_s1ap_free(&pdu); - - if (rv != OGS_OK) { - ogs_error("ogs_s1ap_encode() failed"); - return OGS_ERROR; - } - - return OGS_OK; + return ogs_s1ap_encode(&pdu); } -int s1ap_build_write_replace_warning_request( - ogs_pkbuf_t **s1apbuf, sbc_pws_data_t *sbc_pws) +ogs_pkbuf_t *s1ap_build_write_replace_warning_request(sbc_pws_data_t *sbc_pws) { - int rv; - S1AP_S1AP_PDU_t pdu; S1AP_InitiatingMessage_t *initiatingMessage = NULL; S1AP_WriteReplaceWarningRequest_t *WriteReplaceWarningRequest = NULL; @@ -2677,22 +2469,11 @@ int s1ap_build_write_replace_warning_request( SerialNumber->buf[0], SerialNumber->buf[1], (int)*RepetitionPeriod, (int)*NumberofBroadcastRequest); - rv = ogs_s1ap_encode(s1apbuf, &pdu); - ogs_s1ap_free(&pdu); - - if (rv != OGS_OK) { - ogs_error("ogs_s1ap_encode() failed"); - return OGS_ERROR; - } - - return OGS_OK; + return ogs_s1ap_encode(&pdu); } -int s1ap_build_kill_request( - ogs_pkbuf_t **s1apbuf, sbc_pws_data_t *sbc_pws) +ogs_pkbuf_t *s1ap_build_kill_request(sbc_pws_data_t *sbc_pws) { - int rv; - S1AP_S1AP_PDU_t pdu; S1AP_InitiatingMessage_t *initiatingMessage = NULL; S1AP_KillRequest_t *KillRequest = NULL; @@ -2756,13 +2537,5 @@ int s1ap_build_kill_request( MessageIdentifier->buf[0], MessageIdentifier->buf[1], SerialNumber->buf[0], SerialNumber->buf[1]); - rv = ogs_s1ap_encode(s1apbuf, &pdu); - ogs_s1ap_free(&pdu); - - if (rv != OGS_OK) { - ogs_error("ogs_s1ap_encode() failed"); - return OGS_ERROR; - } - - return OGS_OK; + return ogs_s1ap_encode(&pdu); } diff --git a/src/mme/s1ap-build.h b/src/mme/s1ap-build.h index 68f02f571d..62c5317f29 100644 --- a/src/mme/s1ap-build.h +++ b/src/mme/s1ap-build.h @@ -28,47 +28,43 @@ extern "C" { #endif -int s1ap_build_setup_rsp(ogs_pkbuf_t **pkbuf); -int s1ap_build_setup_failure( - ogs_pkbuf_t **pkbuf, S1AP_Cause_PR group, long cause, long time_to_wait); +ogs_pkbuf_t *s1ap_build_setup_rsp(void); +ogs_pkbuf_t *s1ap_build_setup_failure( + S1AP_Cause_PR group, long cause, long time_to_wait); -int s1ap_build_downlink_nas_transport( - ogs_pkbuf_t **s1apbuf, enb_ue_t *enb_ue, ogs_pkbuf_t *emmbuf); +ogs_pkbuf_t *s1ap_build_downlink_nas_transport( + enb_ue_t *enb_ue, ogs_pkbuf_t *emmbuf); -int s1ap_build_initial_context_setup_request( - ogs_pkbuf_t **s1apbuf, mme_ue_t *mme_ue, ogs_pkbuf_t *emmbuf); -int s1ap_build_ue_context_modification_request( - ogs_pkbuf_t **s1apbuf, mme_ue_t *mme_ue); -int s1ap_build_ue_context_release_command( - ogs_pkbuf_t **s1apbuf, enb_ue_t *enb_ue, S1AP_Cause_PR group, long cause); +ogs_pkbuf_t *s1ap_build_initial_context_setup_request( + mme_ue_t *mme_ue, ogs_pkbuf_t *emmbuf); +ogs_pkbuf_t *s1ap_build_ue_context_modification_request(mme_ue_t *mme_ue); +ogs_pkbuf_t *s1ap_build_ue_context_release_command( + enb_ue_t *enb_ue, S1AP_Cause_PR group, long cause); -int s1ap_build_e_rab_setup_request( - ogs_pkbuf_t **s1apbuf, mme_bearer_t *bearer, ogs_pkbuf_t *esmbuf); -int s1ap_build_e_rab_modify_request( - ogs_pkbuf_t **s1apbuf, mme_bearer_t *bearer, ogs_pkbuf_t *esmbuf); -int s1ap_build_e_rab_release_command(ogs_pkbuf_t **s1apbuf, +ogs_pkbuf_t *s1ap_build_e_rab_setup_request( + mme_bearer_t *bearer, ogs_pkbuf_t *esmbuf); +ogs_pkbuf_t *s1ap_build_e_rab_modify_request( + mme_bearer_t *bearer, ogs_pkbuf_t *esmbuf); +ogs_pkbuf_t *s1ap_build_e_rab_release_command( mme_bearer_t *bearer, ogs_pkbuf_t *esmbuf, S1AP_Cause_PR group, long cause); -int s1ap_build_paging(ogs_pkbuf_t **s1apbuf, +ogs_pkbuf_t *s1ap_build_paging( mme_ue_t *mme_ue, S1AP_CNDomain_t cn_domain); -int s1ap_build_mme_configuration_transfer( - ogs_pkbuf_t **s1apbuf, +ogs_pkbuf_t *s1ap_build_mme_configuration_transfer( S1AP_SONConfigurationTransfer_t *son_configuration_transfer); -int s1ap_build_path_switch_ack( - ogs_pkbuf_t **s1apbuf, mme_ue_t *mme_ue); -int s1ap_build_path_switch_failure(ogs_pkbuf_t **s1apbuf, +ogs_pkbuf_t *s1ap_build_path_switch_ack(mme_ue_t *mme_ue); +ogs_pkbuf_t *s1ap_build_path_switch_failure( uint32_t enb_ue_s1ap_id, uint32_t mme_ue_s1ap_id, S1AP_Cause_PR group, long cause); -int s1ap_build_handover_command( - ogs_pkbuf_t **s1apbuf, enb_ue_t *source_ue); -int s1ap_build_handover_preparation_failure( - ogs_pkbuf_t **s1apbuf, enb_ue_t *source_ue, S1AP_Cause_t *cause); +ogs_pkbuf_t *s1ap_build_handover_command(enb_ue_t *source_ue); +ogs_pkbuf_t *s1ap_build_handover_preparation_failure( + enb_ue_t *source_ue, S1AP_Cause_t *cause); -int s1ap_build_handover_request( - ogs_pkbuf_t **s1apbuf, mme_ue_t *mme_ue, enb_ue_t *target_ue, +ogs_pkbuf_t *s1ap_build_handover_request( + mme_ue_t *mme_ue, enb_ue_t *target_ue, S1AP_ENB_UE_S1AP_ID_t *enb_ue_s1ap_id, S1AP_MME_UE_S1AP_ID_t *mme_ue_s1ap_id, S1AP_HandoverType_t *handovertype, @@ -76,40 +72,35 @@ int s1ap_build_handover_request( S1AP_Source_ToTarget_TransparentContainer_t *source_totarget_transparentContainer); -int s1ap_build_handover_cancel_ack( - ogs_pkbuf_t **s1apbuf, enb_ue_t *source_ue); +ogs_pkbuf_t *s1ap_build_handover_cancel_ack( + enb_ue_t *source_ue); -int s1ap_build_mme_status_transfer(ogs_pkbuf_t **s1apbuf, +ogs_pkbuf_t *s1ap_build_mme_status_transfer( enb_ue_t *target_ue, S1AP_ENB_StatusTransfer_TransparentContainer_t *enb_statustransfer_transparentContainer); -int s1ap_build_error_indication( - ogs_pkbuf_t **s1apbuf, +ogs_pkbuf_t *s1ap_build_error_indication( S1AP_MME_UE_S1AP_ID_t *mme_ue_s1ap_id, S1AP_ENB_UE_S1AP_ID_t *enb_ue_s1ap_id, S1AP_Cause_PR group, long cause); -int s1ap_build_s1_reset( - ogs_pkbuf_t **s1apbuf, +ogs_pkbuf_t *s1ap_build_s1_reset( S1AP_Cause_PR group, long cause, S1AP_UE_associatedLogicalS1_ConnectionListRes_t *partOfS1_Interface); -int s1ap_build_s1_reset_partial( - ogs_pkbuf_t **s1apbuf, +ogs_pkbuf_t *s1ap_build_s1_reset_partial( S1AP_Cause_PR group, long cause, S1AP_MME_UE_S1AP_ID_t *mme_ue_s1ap_id, S1AP_ENB_UE_S1AP_ID_t *enb_ue_s1ap_id); -int s1ap_build_s1_reset_ack( - ogs_pkbuf_t **s1apbuf, +ogs_pkbuf_t *s1ap_build_s1_reset_ack( S1AP_UE_associatedLogicalS1_ConnectionListRes_t *partOfS1_Interface); -int s1ap_build_write_replace_warning_request( - ogs_pkbuf_t **s1apbuf, sbc_pws_data_t *sbc_pws); +ogs_pkbuf_t *s1ap_build_write_replace_warning_request( + sbc_pws_data_t *sbc_pws); -int s1ap_build_kill_request( - ogs_pkbuf_t **s1apbuf, sbc_pws_data_t *sbc_pws); +ogs_pkbuf_t *s1ap_build_kill_request(sbc_pws_data_t *sbc_pws); #ifdef __cplusplus } diff --git a/src/mme/s1ap-handler.c b/src/mme/s1ap-handler.c index 596423416d..d0fa4bb7c5 100644 --- a/src/mme/s1ap-handler.c +++ b/src/mme/s1ap-handler.c @@ -153,15 +153,16 @@ void s1ap_handle_s1_setup_request(mme_enb_t *enb, ogs_s1ap_message_t *message) if (group == S1AP_Cause_PR_NOTHING) { ogs_debug("[MME] S1-Setup response"); - ogs_assert(s1ap_build_setup_rsp(&s1apbuf) == OGS_OK); + s1apbuf = s1ap_build_setup_rsp(); + ogs_expect_or_return(s1apbuf); } else { ogs_debug("[MME] S1-Setup failure"); - ogs_assert(s1ap_build_setup_failure( - &s1apbuf, group, cause, S1AP_TimeToWait_v10s) == OGS_OK); + s1apbuf = s1ap_build_setup_failure(group, cause, S1AP_TimeToWait_v10s); + ogs_expect_or_return(s1apbuf); } - ogs_expect( - s1ap_send_to_enb(enb, s1apbuf, S1AP_NON_UE_SIGNALLING) == OGS_OK); + ogs_expect(OGS_OK == + s1ap_send_to_enb(enb, s1apbuf, S1AP_NON_UE_SIGNALLING)); } void s1ap_handle_initial_ue_message(mme_enb_t *enb, ogs_s1ap_message_t *message) @@ -300,7 +301,8 @@ void s1ap_handle_initial_ue_message(mme_enb_t *enb, ogs_s1ap_message_t *message) ogs_debug(" ENB_UE_S1AP_ID[%d] MME_UE_S1AP_ID[%d] TAC[%d]", enb_ue->enb_ue_s1ap_id, enb_ue->mme_ue_s1ap_id, enb_ue->saved.tai.tac); - s1ap_send_to_nas(enb_ue, S1AP_ProcedureCode_id_initialUEMessage, NAS_PDU); + s1ap_send_to_nas(enb_ue, + S1AP_ProcedureCode_id_initialUEMessage, NAS_PDU); } void s1ap_handle_uplink_nas_transport( @@ -353,7 +355,8 @@ void s1ap_handle_uplink_nas_transport( ogs_debug(" ENB_UE_S1AP_ID[%d] MME_UE_S1AP_ID[%d]", enb_ue->enb_ue_s1ap_id, enb_ue->mme_ue_s1ap_id); - s1ap_send_to_nas(enb_ue, S1AP_ProcedureCode_id_uplinkNASTransport, NAS_PDU); + s1ap_send_to_nas(enb_ue, + S1AP_ProcedureCode_id_uplinkNASTransport, NAS_PDU); } void s1ap_handle_ue_capability_info_indication( @@ -503,8 +506,7 @@ void s1ap_handle_initial_context_setup_response( ogs_debug(" ### ULI PRESENT ###"); uli_presence = 1; } - rv = mme_gtp_send_modify_bearer_request(bearer, uli_presence); - ogs_expect(rv == OGS_OK); + mme_gtp_send_modify_bearer_request(bearer, uli_presence); } } @@ -793,18 +795,14 @@ void s1ap_handle_e_rab_setup_response( ogs_debug(" EBI[%d]", bearer->ebi); if (OGS_FSM_CHECK(&bearer->sm, esm_state_active)) { - int rv; - mme_bearer_t *linked_bearer = mme_linked_bearer(bearer); ogs_assert(linked_bearer); ogs_debug(" Linked-EBI[%d]", linked_bearer->ebi); if (bearer->ebi == linked_bearer->ebi) { - rv = mme_gtp_send_modify_bearer_request(bearer, 0); - ogs_expect(rv == OGS_OK); + mme_gtp_send_modify_bearer_request(bearer, 0); } else { - rv = mme_gtp_send_create_bearer_response(bearer); - ogs_expect(rv == OGS_OK); + mme_gtp_send_create_bearer_response(bearer); } } } @@ -813,7 +811,6 @@ void s1ap_handle_e_rab_setup_response( void s1ap_handle_ue_context_release_request( mme_enb_t *enb, ogs_s1ap_message_t *message) { - int rv; char buf[OGS_ADDRSTRLEN]; int i; @@ -864,11 +861,10 @@ void s1ap_handle_ue_context_release_request( if (!enb_ue) { ogs_warn("No ENB UE Context : MME_UE_S1AP_ID[%d]", (int)*MME_UE_S1AP_ID); - rv = s1ap_send_error_indication(enb, + s1ap_send_error_indication(enb, MME_UE_S1AP_ID, ENB_UE_S1AP_ID, S1AP_Cause_PR_radioNetwork, S1AP_CauseRadioNetwork_unknown_mme_ue_s1ap_id); - ogs_expect(rv == OGS_OK); return; } @@ -943,11 +939,10 @@ void s1ap_handle_ue_context_release_complete( if (!enb_ue) { ogs_warn("No ENB UE Context : MME_UE_S1AP_ID[%d]", (int)*MME_UE_S1AP_ID); - rv = s1ap_send_error_indication(enb, + s1ap_send_error_indication(enb, MME_UE_S1AP_ID, NULL, S1AP_Cause_PR_radioNetwork, S1AP_CauseRadioNetwork_unknown_mme_ue_s1ap_id); - ogs_expect(rv == OGS_OK); return; } @@ -979,9 +974,8 @@ void s1ap_handle_ue_context_release_complete( ogs_assert(mme_ue); if (mme_ue_have_indirect_tunnel(mme_ue)) { - rv = mme_gtp_send_delete_indirect_data_forwarding_tunnel_request( + mme_gtp_send_delete_indirect_data_forwarding_tunnel_request( mme_ue); - ogs_expect(rv == OGS_OK); } else { ogs_warn("Check your eNodeB"); ogs_warn(" There is no INDIRECT TUNNEL"); @@ -1092,14 +1086,14 @@ void s1ap_handle_path_switch_request( ogs_error("Cannot find UE from sourceMME-UE-S1AP-ID[%d] and eNB[%s:%d]", (int)*MME_UE_S1AP_ID, OGS_ADDR(enb->addr, buf), enb->enb_id); - rv = s1ap_build_path_switch_failure(&s1apbuf, + s1apbuf = s1ap_build_path_switch_failure( *ENB_UE_S1AP_ID, *MME_UE_S1AP_ID, S1AP_Cause_PR_radioNetwork, S1AP_CauseRadioNetwork_unknown_mme_ue_s1ap_id); - ogs_expect(rv == OGS_OK && s1apbuf); + ogs_expect_or_return(s1apbuf); - rv = s1ap_send_to_enb(enb, s1apbuf, S1AP_NON_UE_SIGNALLING); - ogs_expect(rv == OGS_OK); + ogs_expect(OGS_OK == + s1ap_send_to_enb(enb, s1apbuf, S1AP_NON_UE_SIGNALLING)); return; } @@ -1113,13 +1107,12 @@ void s1ap_handle_path_switch_request( mme_ue->nhcc++; mme_kdf_nh(mme_ue->kasme, mme_ue->nh, mme_ue->nh); } else { - rv = s1ap_build_path_switch_failure(&s1apbuf, + s1apbuf = s1ap_build_path_switch_failure( *ENB_UE_S1AP_ID, *MME_UE_S1AP_ID, S1AP_Cause_PR_nas, S1AP_CauseNas_authentication_failure); - ogs_expect(rv == OGS_OK && s1apbuf); + ogs_expect_or_return(s1apbuf); - rv = s1ap_send_to_enb_ue(enb_ue, s1apbuf); - ogs_expect(rv == OGS_OK); + s1ap_send_to_enb_ue(enb_ue, s1apbuf); return; } @@ -1190,8 +1183,7 @@ void s1ap_handle_path_switch_request( GTP_COUNTER_INCREMENT( mme_ue, GTP_COUNTER_MODIFY_BEARER_BY_PATH_SWITCH); - rv = mme_gtp_send_modify_bearer_request(bearer, 1); - ogs_expect(rv == OGS_OK); + mme_gtp_send_modify_bearer_request(bearer, 1); } /* Switch to enb */ @@ -1201,7 +1193,6 @@ void s1ap_handle_path_switch_request( void s1ap_handle_enb_configuration_transfer( mme_enb_t *enb, ogs_s1ap_message_t *message, ogs_pkbuf_t *pkbuf) { - int rv; char buf[OGS_ADDRSTRLEN]; int i; @@ -1279,15 +1270,13 @@ void s1ap_handle_enb_configuration_transfer( return; } - rv = s1ap_send_mme_configuration_transfer( + s1ap_send_mme_configuration_transfer( target_enb, SONConfigurationTransfer); - ogs_expect(rv == OGS_OK); } } void s1ap_handle_handover_required(mme_enb_t *enb, ogs_s1ap_message_t *message) { - int rv; char buf[OGS_ADDRSTRLEN]; int i; @@ -1385,8 +1374,7 @@ void s1ap_handle_handover_required(mme_enb_t *enb, ogs_s1ap_message_t *message) } else { ogs_assert(Cause); - rv = s1ap_send_handover_preparation_failure(source_ue, Cause); - ogs_expect(rv == OGS_OK); + s1ap_send_handover_preparation_failure(source_ue, Cause); return; } @@ -1394,11 +1382,10 @@ void s1ap_handle_handover_required(mme_enb_t *enb, ogs_s1ap_message_t *message) ogs_assert(HandoverType); source_ue->handover_type = *HandoverType; - rv = s1ap_send_handover_request(mme_ue, target_enb, + s1ap_send_handover_request(mme_ue, target_enb, ENB_UE_S1AP_ID, MME_UE_S1AP_ID, HandoverType, Cause, Source_ToTarget_TransparentContainer); - ogs_expect(rv == OGS_OK); } void s1ap_handle_handover_request_ack(mme_enb_t *enb, ogs_s1ap_message_t *message) @@ -1524,18 +1511,15 @@ void s1ap_handle_handover_request_ack(mme_enb_t *enb, ogs_s1ap_message_t *messag Target_ToSource_TransparentContainer); if (mme_ue_have_indirect_tunnel(mme_ue) == 1) { - rv = mme_gtp_send_create_indirect_data_forwarding_tunnel_request( + mme_gtp_send_create_indirect_data_forwarding_tunnel_request( mme_ue); - ogs_expect(rv == OGS_OK); } else { - rv = s1ap_send_handover_command(source_ue); - ogs_expect(rv == OGS_OK); + s1ap_send_handover_command(source_ue); } } void s1ap_handle_handover_failure(mme_enb_t *enb, ogs_s1ap_message_t *message) { - int rv; char buf[OGS_ADDRSTRLEN]; int i; @@ -1590,8 +1574,7 @@ void s1ap_handle_handover_failure(mme_enb_t *enb, ogs_s1ap_message_t *message) ogs_debug(" Target : ENB_UE_S1AP_ID[%d] MME_UE_S1AP_ID[%d]", target_ue->enb_ue_s1ap_id, target_ue->mme_ue_s1ap_id); - rv = s1ap_send_handover_preparation_failure(source_ue, Cause); - ogs_expect(rv == OGS_OK); + s1ap_send_handover_preparation_failure(source_ue, Cause); s1ap_send_ue_context_release_command( target_ue, S1AP_Cause_PR_radioNetwork, @@ -1601,7 +1584,6 @@ void s1ap_handle_handover_failure(mme_enb_t *enb, ogs_s1ap_message_t *message) void s1ap_handle_handover_cancel(mme_enb_t *enb, ogs_s1ap_message_t *message) { - int rv; char buf[OGS_ADDRSTRLEN]; int i; @@ -1661,8 +1643,7 @@ void s1ap_handle_handover_cancel(mme_enb_t *enb, ogs_s1ap_message_t *message) ogs_debug(" Target : ENB_UE_S1AP_ID[%d] MME_UE_S1AP_ID[%d]", target_ue->enb_ue_s1ap_id, target_ue->mme_ue_s1ap_id); - rv = s1ap_send_handover_cancel_ack(source_ue); - ogs_expect(rv == OGS_OK); + s1ap_send_handover_cancel_ack(source_ue); s1ap_send_ue_context_release_command( target_ue, S1AP_Cause_PR_radioNetwork, @@ -1678,7 +1659,6 @@ void s1ap_handle_handover_cancel(mme_enb_t *enb, ogs_s1ap_message_t *message) void s1ap_handle_enb_status_transfer(mme_enb_t *enb, ogs_s1ap_message_t *message) { - int rv; char buf[OGS_ADDRSTRLEN]; int i; @@ -1739,14 +1719,12 @@ void s1ap_handle_enb_status_transfer(mme_enb_t *enb, ogs_s1ap_message_t *message ogs_debug(" Target : ENB_UE_S1AP_ID[%d] MME_UE_S1AP_ID[%d]", target_ue->enb_ue_s1ap_id, target_ue->mme_ue_s1ap_id); - rv = s1ap_send_mme_status_transfer(target_ue, + s1ap_send_mme_status_transfer(target_ue, ENB_StatusTransfer_TransparentContainer); - ogs_expect(rv == OGS_OK); } void s1ap_handle_handover_notification(mme_enb_t *enb, ogs_s1ap_message_t *message) { - int rv; char buf[OGS_ADDRSTRLEN]; int i; @@ -1872,8 +1850,7 @@ void s1ap_handle_handover_notification(mme_enb_t *enb, ogs_s1ap_message_t *messa GTP_COUNTER_INCREMENT( mme_ue, GTP_COUNTER_MODIFY_BEARER_BY_HANDOVER_NOTIFY); - rv = mme_gtp_send_modify_bearer_request(bearer, 1); - ogs_expect(rv == OGS_OK); + mme_gtp_send_modify_bearer_request(bearer, 1); bearer = mme_bearer_next(bearer); } @@ -1884,7 +1861,6 @@ void s1ap_handle_handover_notification(mme_enb_t *enb, ogs_s1ap_message_t *messa void s1ap_handle_s1_reset( mme_enb_t *enb, ogs_s1ap_message_t *message) { - int rv; char buf[OGS_ADDRSTRLEN]; int i; @@ -1994,8 +1970,7 @@ void s1ap_handle_s1_reset( break; } - rv = s1ap_send_s1_reset_ack(enb, partOfS1_Interface); - ogs_expect(rv == OGS_OK); + s1ap_send_s1_reset_ack(enb, partOfS1_Interface); } void s1ap_handle_write_replace_warning_response( @@ -2045,5 +2020,4 @@ void s1ap_handle_kill_response( ogs_debug(" IP[%s] ENB_ID[%d]", OGS_ADDR(enb->addr, buf), enb->enb_id); - } diff --git a/src/mme/s1ap-path.c b/src/mme/s1ap-path.c index a962f9b15c..735d7436ca 100644 --- a/src/mme/s1ap-path.c +++ b/src/mme/s1ap-path.c @@ -89,7 +89,7 @@ int s1ap_send_to_enb(mme_enb_t *enb, ogs_pkbuf_t *pkbuf, uint16_t stream_no) enb->sock, enb->addr, NULL, 0, 0); } - return OGS_OK;; + return rv; } int s1ap_send_to_enb_ue(enb_ue_t *enb_ue, ogs_pkbuf_t *pkbuf) @@ -151,7 +151,7 @@ int s1ap_send_to_esm(mme_ue_t *mme_ue, ogs_pkbuf_t *esmbuf) mme_event_free(e); } - return OGS_OK; + return rv; } int s1ap_send_to_nas(enb_ue_t *enb_ue, @@ -185,27 +185,23 @@ int s1ap_send_to_nas(enb_ue_t *enb_ue, break; case OGS_NAS_SECURITY_HEADER_INTEGRITY_PROTECTED: security_header_type.integrity_protected = 1; - if (!ogs_pkbuf_pull(nasbuf, 6)) - return OGS_ERROR; + ogs_pkbuf_pull(nasbuf, 6); break; case OGS_NAS_SECURITY_HEADER_INTEGRITY_PROTECTED_AND_CIPHERED: security_header_type.integrity_protected = 1; security_header_type.ciphered = 1; - if (!ogs_pkbuf_pull(nasbuf, 6)) - return OGS_ERROR; + ogs_pkbuf_pull(nasbuf, 6); break; case OGS_NAS_SECURITY_HEADER_INTEGRITY_PROTECTED_AND_NEW_SECURITY_CONTEXT: security_header_type.integrity_protected = 1; security_header_type.new_security_context = 1; - if (!ogs_pkbuf_pull(nasbuf, 6)) - return OGS_ERROR; + ogs_pkbuf_pull(nasbuf, 6); break; case OGS_NAS_SECURITY_HEADER_INTEGRITY_PROTECTED_AND_CIPHTERD_WITH_NEW_INTEGRITY_CONTEXT: security_header_type.integrity_protected = 1; security_header_type.ciphered = 1; security_header_type.new_security_context = 1; - if (!ogs_pkbuf_pull(nasbuf, 6)) - return OGS_ERROR; + ogs_pkbuf_pull(nasbuf, 6); break; default: ogs_error("Not implemented(securiry header type:0x%x)", @@ -214,7 +210,9 @@ int s1ap_send_to_nas(enb_ue_t *enb_ue, } if (enb_ue->mme_ue) { - if (nas_security_decode(enb_ue->mme_ue, security_header_type, nasbuf) != OGS_OK) { + if (nas_security_decode(enb_ue->mme_ue, + security_header_type, nasbuf) != OGS_OK) { + ogs_error("nas_security_decode failed()"); return OGS_ERROR; } } @@ -235,49 +233,44 @@ int s1ap_send_to_nas(enb_ue_t *enb_ue, ogs_pkbuf_free(e->pkbuf); mme_event_free(e); } + return rv; } else if (h->protocol_discriminator == OGS_NAS_PROTOCOL_DISCRIMINATOR_ESM) { mme_ue_t *mme_ue = enb_ue->mme_ue; ogs_assert(mme_ue); - s1ap_send_to_esm(mme_ue, nasbuf); + return s1ap_send_to_esm(mme_ue, nasbuf); } else { ogs_error("Unknown/Unimplemented NAS Protocol discriminator 0x%02x", h->protocol_discriminator); return OGS_ERROR; } - - return OGS_OK; } -int s1ap_send_initial_context_setup_request(mme_ue_t *mme_ue) +void s1ap_send_initial_context_setup_request(mme_ue_t *mme_ue) { int rv; ogs_pkbuf_t *s1apbuf = NULL; ogs_assert(mme_ue); - rv = s1ap_build_initial_context_setup_request(&s1apbuf, mme_ue, NULL); - ogs_expect(rv == OGS_OK && s1apbuf); + s1apbuf = s1ap_build_initial_context_setup_request(mme_ue, NULL); + ogs_expect_or_return(s1apbuf); rv = nas_send_to_enb(mme_ue, s1apbuf); ogs_expect(rv == OGS_OK); - - return OGS_OK; } -int s1ap_send_ue_context_modification_request(mme_ue_t *mme_ue) +void s1ap_send_ue_context_modification_request(mme_ue_t *mme_ue) { int rv; ogs_pkbuf_t *s1apbuf = NULL; ogs_assert(mme_ue); - rv = s1ap_build_ue_context_modification_request(&s1apbuf, mme_ue); - ogs_expect(rv == OGS_OK && s1apbuf); + s1apbuf = s1ap_build_ue_context_modification_request(mme_ue); + ogs_expect_or_return(s1apbuf); rv = nas_send_to_enb(mme_ue, s1apbuf); ogs_expect(rv == OGS_OK); - - return OGS_OK; } void s1ap_send_ue_context_release_command( @@ -300,9 +293,8 @@ void s1ap_send_ue_context_release_command( ogs_debug(" Group[%d] Cause[%d] Action[%d] Delay[%d]", group, (int)cause, action, delay); - rv = s1ap_build_ue_context_release_command( - &s1apbuf, enb_ue, group, cause); - ogs_expect(rv == OGS_OK && s1apbuf); + s1apbuf = s1ap_build_ue_context_release_command(enb_ue, group, cause); + ogs_expect_or_return(s1apbuf); rv = s1ap_delayed_send_to_enb_ue(enb_ue, s1apbuf, delay); ogs_expect(rv == OGS_OK); @@ -313,9 +305,8 @@ void s1ap_send_ue_context_release_command( ogs_debug(" Group[%d] Cause[%d] Action[%d] Delay[%d]", group, (int)cause, action, delay); - rv = s1ap_build_ue_context_release_command( - &s1apbuf, enb_ue, group, cause); - ogs_assert(rv == OGS_OK && s1apbuf); + s1apbuf = s1ap_build_ue_context_release_command(enb_ue, group, cause); + ogs_expect_or_return(s1apbuf); rv = s1ap_delayed_send_to_enb_ue(enb_ue, s1apbuf, 0); ogs_expect(rv == OGS_OK); @@ -339,8 +330,8 @@ void s1ap_send_paging(mme_ue_t *mme_ue, S1AP_CNDomain_t cn_domain) if (mme_ue->t3413.pkbuf) { s1apbuf = mme_ue->t3413.pkbuf; } else { - rv = s1ap_build_paging(&s1apbuf, mme_ue, cn_domain); - ogs_expect(rv == OGS_OK && s1apbuf); + s1apbuf = s1ap_build_paging(mme_ue, cn_domain); + ogs_expect_or_return(s1apbuf); } mme_ue->t3413.pkbuf = ogs_pkbuf_copy(s1apbuf); @@ -356,7 +347,7 @@ void s1ap_send_paging(mme_ue_t *mme_ue, S1AP_CNDomain_t cn_domain) mme_timer_cfg(MME_TIMER_T3413)->duration); } -int s1ap_send_mme_configuration_transfer( +void s1ap_send_mme_configuration_transfer( mme_enb_t *target_enb, S1AP_SONConfigurationTransfer_t *SONConfigurationTransfer) { @@ -366,49 +357,42 @@ int s1ap_send_mme_configuration_transfer( ogs_assert(target_enb); ogs_assert(SONConfigurationTransfer); - rv = s1ap_build_mme_configuration_transfer( - &s1apbuf, SONConfigurationTransfer); - ogs_expect(rv == OGS_OK && s1apbuf); + s1apbuf = s1ap_build_mme_configuration_transfer(SONConfigurationTransfer); + ogs_expect_or_return(s1apbuf); rv = s1ap_send_to_enb(target_enb, s1apbuf, S1AP_NON_UE_SIGNALLING); ogs_expect(rv == OGS_OK); - - return rv; } -int s1ap_send_path_switch_ack(mme_ue_t *mme_ue) +void s1ap_send_path_switch_ack(mme_ue_t *mme_ue) { int rv; ogs_pkbuf_t *s1apbuf = NULL; ogs_assert(mme_ue); - rv = s1ap_build_path_switch_ack(&s1apbuf, mme_ue); - ogs_expect(rv == OGS_OK && s1apbuf); + s1apbuf = s1ap_build_path_switch_ack(mme_ue); + ogs_expect_or_return(s1apbuf); rv = nas_send_to_enb(mme_ue, s1apbuf); ogs_expect(rv == OGS_OK); - - return OGS_OK; } -int s1ap_send_handover_command(enb_ue_t *source_ue) +void s1ap_send_handover_command(enb_ue_t *source_ue) { int rv; ogs_pkbuf_t *s1apbuf = NULL; ogs_assert(source_ue); - rv = s1ap_build_handover_command(&s1apbuf, source_ue); - ogs_expect(rv == OGS_OK && s1apbuf); + s1apbuf = s1ap_build_handover_command(source_ue); + ogs_expect_or_return(s1apbuf); rv = s1ap_send_to_enb_ue(source_ue, s1apbuf); ogs_expect(rv == OGS_OK); - - return rv; } -int s1ap_send_handover_preparation_failure( +void s1ap_send_handover_preparation_failure( enb_ue_t *source_ue, S1AP_Cause_t *cause) { int rv; @@ -417,33 +401,29 @@ int s1ap_send_handover_preparation_failure( ogs_assert(source_ue); ogs_assert(cause); - rv = s1ap_build_handover_preparation_failure(&s1apbuf, source_ue, cause); - ogs_expect(rv == OGS_OK && s1apbuf); + s1apbuf = s1ap_build_handover_preparation_failure(source_ue, cause); + ogs_expect_or_return(s1apbuf); rv = s1ap_send_to_enb_ue(source_ue, s1apbuf); ogs_expect(rv == OGS_OK); - - return rv; } -int s1ap_send_handover_cancel_ack(enb_ue_t *source_ue) +void s1ap_send_handover_cancel_ack(enb_ue_t *source_ue) { int rv; ogs_pkbuf_t *s1apbuf = NULL; ogs_assert(source_ue); - rv = s1ap_build_handover_cancel_ack(&s1apbuf, source_ue); - ogs_expect(rv == OGS_OK && s1apbuf); + s1apbuf = s1ap_build_handover_cancel_ack(source_ue); + ogs_expect_or_return(s1apbuf); rv = s1ap_send_to_enb_ue(source_ue, s1apbuf); ogs_expect(rv == OGS_OK); - - return rv; } -int s1ap_send_handover_request( +void s1ap_send_handover_request( mme_ue_t *mme_ue, mme_enb_t *target_enb, S1AP_ENB_UE_S1AP_ID_t *enb_ue_s1ap_id, @@ -477,19 +457,17 @@ int s1ap_send_handover_request( source_ue_associate_target_ue(source_ue, target_ue); - rv = s1ap_build_handover_request(&s1apbuf, mme_ue, target_ue, + s1apbuf = s1ap_build_handover_request(mme_ue, target_ue, enb_ue_s1ap_id, mme_ue_s1ap_id, handovertype, cause, source_totarget_transparentContainer); - ogs_expect(rv == OGS_OK && s1apbuf); + ogs_expect_or_return(s1apbuf); rv = s1ap_send_to_enb_ue(target_ue, s1apbuf); ogs_expect(rv == OGS_OK); - - return rv; } -int s1ap_send_mme_status_transfer( +void s1ap_send_mme_status_transfer( enb_ue_t *target_ue, S1AP_ENB_StatusTransfer_TransparentContainer_t *enb_statustransfer_transparentContainer) @@ -499,17 +477,15 @@ int s1ap_send_mme_status_transfer( ogs_assert(target_ue); - rv = s1ap_build_mme_status_transfer(&s1apbuf, target_ue, + s1apbuf = s1ap_build_mme_status_transfer(target_ue, enb_statustransfer_transparentContainer); - ogs_expect(rv == OGS_OK && s1apbuf); + ogs_expect_or_return(s1apbuf); rv = s1ap_send_to_enb_ue(target_ue, s1apbuf); ogs_expect(rv == OGS_OK); - - return rv; } -int s1ap_send_error_indication( +void s1ap_send_error_indication( mme_enb_t *enb, S1AP_MME_UE_S1AP_ID_t *mme_ue_s1ap_id, S1AP_ENB_UE_S1AP_ID_t *enb_ue_s1ap_id, @@ -520,17 +496,15 @@ int s1ap_send_error_indication( ogs_assert(enb); - rv = s1ap_build_error_indication(&s1apbuf, + s1apbuf = s1ap_build_error_indication( mme_ue_s1ap_id, enb_ue_s1ap_id, group, cause); - ogs_expect(rv == OGS_OK && s1apbuf); + ogs_expect_or_return(s1apbuf); rv = s1ap_send_to_enb(enb, s1apbuf, S1AP_NON_UE_SIGNALLING); ogs_expect(rv == OGS_OK); - - return rv; } -int s1ap_send_s1_reset_ack( +void s1ap_send_s1_reset_ack( mme_enb_t *enb, S1AP_UE_associatedLogicalS1_ConnectionListRes_t *partOfS1_Interface) { @@ -539,11 +513,9 @@ int s1ap_send_s1_reset_ack( ogs_assert(enb); - rv = s1ap_build_s1_reset_ack(&s1apbuf, partOfS1_Interface); - ogs_expect(rv == OGS_OK && s1apbuf); + s1apbuf = s1ap_build_s1_reset_ack(partOfS1_Interface); + ogs_expect_or_return(s1apbuf); rv = s1ap_send_to_enb(enb, s1apbuf, S1AP_NON_UE_SIGNALLING); ogs_expect(rv == OGS_OK); - - return rv; } diff --git a/src/mme/s1ap-path.h b/src/mme/s1ap-path.h index f2a705baf2..9c43bc9a87 100644 --- a/src/mme/s1ap-path.h +++ b/src/mme/s1ap-path.h @@ -48,25 +48,25 @@ int s1ap_send_to_nas(enb_ue_t *enb_ue, S1AP_ProcedureCode_t procedureCode, S1AP_NAS_PDU_t *nasPdu); int s1ap_send_to_esm(mme_ue_t *mme_ue, ogs_pkbuf_t *esmbuf); -int s1ap_send_initial_context_setup_request(mme_ue_t *mme_ue); -int s1ap_send_ue_context_modification_request(mme_ue_t *mme_ue); +void s1ap_send_initial_context_setup_request(mme_ue_t *mme_ue); +void s1ap_send_ue_context_modification_request(mme_ue_t *mme_ue); void s1ap_send_ue_context_release_command( enb_ue_t *enb_ue, S1AP_Cause_PR group, long cause, uint8_t action, uint32_t delay); void s1ap_send_paging(mme_ue_t *mme_ue, S1AP_CNDomain_t cn_domain); -int s1ap_send_mme_configuration_transfer( +void s1ap_send_mme_configuration_transfer( mme_enb_t *target_enb, S1AP_SONConfigurationTransfer_t *SONConfigurationTransfer); -int s1ap_send_path_switch_ack(mme_ue_t *mme_ue); +void s1ap_send_path_switch_ack(mme_ue_t *mme_ue); -int s1ap_send_handover_command(enb_ue_t *source_ue); -int s1ap_send_handover_preparation_failure( +void s1ap_send_handover_command(enb_ue_t *source_ue); +void s1ap_send_handover_preparation_failure( enb_ue_t *source_ue, S1AP_Cause_t *cause); -int s1ap_send_handover_request( +void s1ap_send_handover_request( mme_ue_t *mme_ue, mme_enb_t *target_enb, S1AP_ENB_UE_S1AP_ID_t *enb_ue_s1ap_id, @@ -76,18 +76,18 @@ int s1ap_send_handover_request( S1AP_Source_ToTarget_TransparentContainer_t *source_totarget_transparentContainer); -int s1ap_send_handover_cancel_ack(enb_ue_t *source_ue); +void s1ap_send_handover_cancel_ack(enb_ue_t *source_ue); -int s1ap_send_mme_status_transfer( +void s1ap_send_mme_status_transfer( enb_ue_t *target_ue, S1AP_ENB_StatusTransfer_TransparentContainer_t *enb_statustransfer_transparentContainer); -int s1ap_send_error_indication( +void s1ap_send_error_indication( mme_enb_t *enb, S1AP_MME_UE_S1AP_ID_t *mme_ue_s1ap_id, S1AP_ENB_UE_S1AP_ID_t *enb_ue_s1ap_id, S1AP_Cause_PR group, long cause); -int s1ap_send_s1_reset_ack( +void s1ap_send_s1_reset_ack( mme_enb_t *enb, S1AP_UE_associatedLogicalS1_ConnectionListRes_t *partOfS1_Interface); diff --git a/src/mme/sbc-handler.c b/src/mme/sbc-handler.c index 63a10f4a25..bb86c7a070 100644 --- a/src/mme/sbc-handler.c +++ b/src/mme/sbc-handler.c @@ -27,7 +27,6 @@ void sbc_handle_write_replace_warning_request(sbc_pws_data_t *sbc_pws) ogs_pkbuf_t *s1apbuf = NULL; mme_enb_t *enb = NULL; int i, j, flag; - int rv; /* Find enB with matched TAI */ ogs_list_for_each(&mme_self()->enb_list, enb) { @@ -47,11 +46,9 @@ void sbc_handle_write_replace_warning_request(sbc_pws_data_t *sbc_pws) flag = 1; if (flag) { - s1apbuf = NULL; - /* Buidl S1AP Write Replace Warning Request message */ - rv = s1ap_build_write_replace_warning_request(&s1apbuf, sbc_pws); - ogs_expect(rv == OGS_OK); + s1apbuf = s1ap_build_write_replace_warning_request(sbc_pws); + ogs_expect_or_return(s1apbuf); /* Send to enb */ ogs_expect(s1ap_send_to_enb( @@ -65,7 +62,6 @@ void sbc_handle_stop_warning_request(sbc_pws_data_t *sbc_pws) ogs_pkbuf_t *s1apbuf = NULL; mme_enb_t *enb = NULL; int i, j, flag; - int rv; /* Find enB with matched TAI */ ogs_list_for_each(&mme_self()->enb_list, enb) { @@ -85,11 +81,9 @@ void sbc_handle_stop_warning_request(sbc_pws_data_t *sbc_pws) flag = 1; if (flag) { - s1apbuf = NULL; - /* Buidl S1AP Kill request message */ - rv = s1ap_build_kill_request(&s1apbuf, sbc_pws); - ogs_expect(rv == OGS_OK && s1apbuf); + s1apbuf = s1ap_build_kill_request(sbc_pws); + ogs_expect_or_return(s1apbuf); /* Send to enb */ ogs_expect(s1ap_send_to_enb( diff --git a/src/mme/sgsap-path.c b/src/mme/sgsap-path.c index 5f853f0e41..45ce434f05 100644 --- a/src/mme/sgsap-path.c +++ b/src/mme/sgsap-path.c @@ -98,7 +98,7 @@ int sgsap_send_to_vlr_with_sid( node->sock, node->addr, NULL, 0, 0); } - return OGS_OK; + return rv; } int sgsap_send_to_vlr(mme_ue_t *mme_ue, ogs_pkbuf_t *pkbuf) @@ -122,7 +122,7 @@ int sgsap_send_to_vlr(mme_ue_t *mme_ue, ogs_pkbuf_t *pkbuf) return sgsap_send_to_vlr_with_sid(vlr, pkbuf, mme_ue->vlr_ostream_id); } -int sgsap_send_location_update_request(mme_ue_t *mme_ue) +void sgsap_send_location_update_request(mme_ue_t *mme_ue) { int rv; ogs_pkbuf_t *pkbuf = NULL; @@ -132,13 +132,12 @@ int sgsap_send_location_update_request(mme_ue_t *mme_ue) ogs_debug(" IMSI[%s]", mme_ue->imsi_bcd); pkbuf = sgsap_build_location_update_request(mme_ue); + ogs_expect_or_return(pkbuf); rv = sgsap_send_to_vlr(mme_ue, pkbuf); ogs_expect(rv == OGS_OK); - - return OGS_OK; } -int sgsap_send_tmsi_reallocation_complete(mme_ue_t *mme_ue) +void sgsap_send_tmsi_reallocation_complete(mme_ue_t *mme_ue) { int rv; ogs_pkbuf_t *pkbuf = NULL; @@ -148,26 +147,24 @@ int sgsap_send_tmsi_reallocation_complete(mme_ue_t *mme_ue) ogs_debug(" IMSI[%s]", mme_ue->imsi_bcd); pkbuf = sgsap_build_tmsi_reallocation_complete(mme_ue); + ogs_expect_or_return(pkbuf); rv = sgsap_send_to_vlr(mme_ue, pkbuf); ogs_expect(rv == OGS_OK); - - return OGS_OK; } -int sgsap_send_detach_indication(mme_ue_t *mme_ue) +void sgsap_send_detach_indication(mme_ue_t *mme_ue) { int rv; ogs_pkbuf_t *pkbuf = NULL; ogs_assert(mme_ue); pkbuf = sgsap_build_detach_indication(mme_ue); + ogs_expect_or_return(pkbuf); rv = sgsap_send_to_vlr(mme_ue, pkbuf); ogs_expect(rv == OGS_OK); - - return OGS_OK; } -int sgsap_send_mo_csfb_indication(mme_ue_t *mme_ue) +void sgsap_send_mo_csfb_indication(mme_ue_t *mme_ue) { int rv; ogs_pkbuf_t *pkbuf = NULL; @@ -177,13 +174,12 @@ int sgsap_send_mo_csfb_indication(mme_ue_t *mme_ue) ogs_debug(" IMSI[%s]", mme_ue->imsi_bcd); pkbuf = sgsap_build_mo_csfb_indication(mme_ue); + ogs_expect_or_return(pkbuf); rv = sgsap_send_to_vlr(mme_ue, pkbuf); ogs_expect(rv == OGS_OK); - - return OGS_OK; } -int sgsap_send_service_request(mme_ue_t *mme_ue, uint8_t emm_mode) +void sgsap_send_service_request(mme_ue_t *mme_ue, uint8_t emm_mode) { int rv; ogs_pkbuf_t *pkbuf = NULL; @@ -195,13 +191,12 @@ int sgsap_send_service_request(mme_ue_t *mme_ue, uint8_t emm_mode) ogs_debug(" EMM_MODE[%d]", emm_mode); pkbuf = sgsap_build_service_request(mme_ue, emm_mode); + ogs_expect_or_return(pkbuf); rv = sgsap_send_to_vlr(mme_ue, pkbuf); ogs_expect(rv == OGS_OK); - - return OGS_OK; } -int sgsap_send_reset_ack(mme_vlr_t *vlr) +void sgsap_send_reset_ack(mme_vlr_t *vlr) { int rv; ogs_pkbuf_t *pkbuf = NULL; @@ -210,13 +205,12 @@ int sgsap_send_reset_ack(mme_vlr_t *vlr) ogs_debug("[SGSAP] RESET-ACK"); pkbuf = sgsap_build_reset_ack(vlr); + ogs_expect_or_return(pkbuf); rv = sgsap_send_to_vlr_with_sid(vlr, pkbuf, 0); ogs_expect(rv == OGS_OK); - - return OGS_OK; } -int sgsap_send_uplink_unitdata( +void sgsap_send_uplink_unitdata( mme_ue_t *mme_ue, ogs_nas_message_container_t *nas_message_container) { int rv; @@ -230,13 +224,12 @@ int sgsap_send_uplink_unitdata( nas_message_container->buffer, nas_message_container->length); pkbuf = sgsap_build_uplink_unidata(mme_ue, nas_message_container); + ogs_expect_or_return(pkbuf); rv = sgsap_send_to_vlr(mme_ue, pkbuf); ogs_expect(rv == OGS_OK); - - return OGS_OK; } -int sgsap_send_ue_unreachable(mme_ue_t *mme_ue, uint8_t sgs_cause) +void sgsap_send_ue_unreachable(mme_ue_t *mme_ue, uint8_t sgs_cause) { int rv; ogs_pkbuf_t *pkbuf = NULL; @@ -247,8 +240,7 @@ int sgsap_send_ue_unreachable(mme_ue_t *mme_ue, uint8_t sgs_cause) ogs_debug(" CAUSE[%d]", sgs_cause); pkbuf = sgsap_build_ue_unreachable(mme_ue, sgs_cause); + ogs_expect_or_return(pkbuf); rv = sgsap_send_to_vlr(mme_ue, pkbuf); ogs_expect(rv == OGS_OK); - - return OGS_OK; } diff --git a/src/mme/sgsap-path.h b/src/mme/sgsap-path.h index 48396a8196..a321f68125 100644 --- a/src/mme/sgsap-path.h +++ b/src/mme/sgsap-path.h @@ -41,15 +41,15 @@ int sgsap_send_to_vlr_with_sid( mme_vlr_t *vlr, ogs_pkbuf_t *pkbuf, uint16_t stream_no); int sgsap_send_to_vlr(mme_ue_t *mme_ue, ogs_pkbuf_t *pkbuf); -int sgsap_send_location_update_request(mme_ue_t *mme_ue); -int sgsap_send_tmsi_reallocation_complete(mme_ue_t *mme_ue); -int sgsap_send_detach_indication(mme_ue_t *mme_ue); -int sgsap_send_mo_csfb_indication(mme_ue_t *mme_ue); -int sgsap_send_service_request(mme_ue_t *mme_ue, uint8_t emm_mode); -int sgsap_send_reset_ack(mme_vlr_t *vlr); -int sgsap_send_uplink_unitdata( +void sgsap_send_location_update_request(mme_ue_t *mme_ue); +void sgsap_send_tmsi_reallocation_complete(mme_ue_t *mme_ue); +void sgsap_send_detach_indication(mme_ue_t *mme_ue); +void sgsap_send_mo_csfb_indication(mme_ue_t *mme_ue); +void sgsap_send_service_request(mme_ue_t *mme_ue, uint8_t emm_mode); +void sgsap_send_reset_ack(mme_vlr_t *vlr); +void sgsap_send_uplink_unitdata( mme_ue_t *mme_ue, ogs_nas_message_container_t *nas_message_container); -int sgsap_send_ue_unreachable(mme_ue_t *mme_ue, uint8_t sgs_cause); +void sgsap_send_ue_unreachable(mme_ue_t *mme_ue, uint8_t sgs_cause); #ifdef __cplusplus } diff --git a/src/pgw/pgw-gx-handler.c b/src/pgw/pgw-gx-handler.c index 4f538f7d7e..d49650d02b 100644 --- a/src/pgw/pgw-gx-handler.c +++ b/src/pgw/pgw-gx-handler.c @@ -23,7 +23,7 @@ #include "pgw-gx-handler.h" #include "pgw-ipfw.h" -static int bearer_binding(pgw_sess_t *sess, ogs_diam_gx_message_t *gx_message); +static void bearer_binding(pgw_sess_t *sess, ogs_diam_gx_message_t *gx_message); static void timeout(ogs_gtp_xact_t *xact, void *data) { @@ -56,18 +56,17 @@ void pgw_gx_handle_cca_initial_request( h.type = OGS_GTP_CREATE_SESSION_RESPONSE_TYPE; h.teid = sess->sgw_s5c_teid; - rv = pgw_s5c_build_create_session_response( - &pkbuf, h.type, sess, gx_message, req); - ogs_assert(rv == OGS_OK); + pkbuf = pgw_s5c_build_create_session_response( + h.type, sess, gx_message, req); + ogs_expect_or_return(pkbuf); rv = ogs_gtp_xact_update_tx(xact, &h, pkbuf); - ogs_assert(rv == OGS_OK); + ogs_expect_or_return(rv == OGS_OK); rv = ogs_gtp_xact_commit(xact); - ogs_assert(rv == OGS_OK); + ogs_expect(rv == OGS_OK); - rv = bearer_binding(sess, gx_message); - ogs_assert(rv == OGS_OK); + bearer_binding(sess, gx_message); } void pgw_gx_handle_cca_termination_request( @@ -98,27 +97,24 @@ void pgw_gx_handle_cca_termination_request( h.type = OGS_GTP_DELETE_SESSION_RESPONSE_TYPE; h.teid = sgw_s5c_teid; - rv = pgw_s5c_build_delete_session_response( - &pkbuf, h.type, gx_message, req); - ogs_assert(rv == OGS_OK); + pkbuf = pgw_s5c_build_delete_session_response( + h.type, gx_message, req); + ogs_expect_or_return(pkbuf); rv = ogs_gtp_xact_update_tx(xact, &h, pkbuf); - ogs_assert(rv == OGS_OK); + ogs_expect_or_return(rv == OGS_OK); rv = ogs_gtp_xact_commit(xact); - ogs_assert(rv == OGS_OK); + ogs_expect(rv == OGS_OK); } void pgw_gx_handle_re_auth_request( pgw_sess_t *sess, ogs_diam_gx_message_t *gx_message) { - int rv; - - rv = bearer_binding(sess, gx_message); - ogs_assert(rv == OGS_OK); + bearer_binding(sess, gx_message); } -static int bearer_binding(pgw_sess_t *sess, ogs_diam_gx_message_t *gx_message) +static void bearer_binding(pgw_sess_t *sess, ogs_diam_gx_message_t *gx_message) { int rv; int i, j; @@ -198,14 +194,14 @@ static int bearer_binding(pgw_sess_t *sess, ogs_diam_gx_message_t *gx_message) pgw_rule_t rule; pgw_pf_t *pf = NULL; - ogs_assert(flow); - ogs_assert(flow->description); + ogs_expect_or_return(flow); + ogs_expect_or_return(flow->description); rv = pgw_compile_packet_filter(&rule, flow->description); - ogs_assert(rv == OGS_OK); + ogs_expect_or_return(rv == OGS_OK); pf = pgw_pf_add(bearer, pcc_rule->precedence); - ogs_assert(pf); + ogs_expect_or_return(pf); memcpy(&pf->rule, &rule, sizeof(pgw_rule_t)); pf->direction = flow->direction; @@ -217,23 +213,23 @@ static int bearer_binding(pgw_sess_t *sess, ogs_diam_gx_message_t *gx_message) h.type = OGS_GTP_CREATE_BEARER_REQUEST_TYPE; h.teid = sess->sgw_s5c_teid; - rv = pgw_s5c_build_create_bearer_request(&pkbuf, h.type, bearer); - ogs_assert(rv == OGS_OK); + pkbuf = pgw_s5c_build_create_bearer_request(h.type, bearer); + ogs_expect_or_return(pkbuf); } else { h.type = OGS_GTP_UPDATE_BEARER_REQUEST_TYPE; h.teid = sess->sgw_s5c_teid; - rv = pgw_s5c_build_update_bearer_request( - &pkbuf, h.type, bearer, qos_presence, tft_presence); - ogs_assert(rv == OGS_OK); + pkbuf = pgw_s5c_build_update_bearer_request( + h.type, bearer, qos_presence, tft_presence); + ogs_expect_or_return(pkbuf); } xact = ogs_gtp_xact_local_create( sess->gnode, &h, pkbuf, timeout, sess); - ogs_assert(xact); + ogs_expect_or_return(xact); rv = ogs_gtp_xact_commit(xact); - ogs_assert(rv == OGS_OK); + ogs_expect(rv == OGS_OK); } else if (pcc_rule->type == OGS_PCC_RULE_TYPE_REMOVE) { bearer = pgw_bearer_find_by_name(sess, pcc_rule->name); ogs_assert(bearer); @@ -242,22 +238,18 @@ static int bearer_binding(pgw_sess_t *sess, ogs_diam_gx_message_t *gx_message) h.type = OGS_GTP_DELETE_BEARER_REQUEST_TYPE; h.teid = sess->sgw_s5c_teid; - rv = pgw_s5c_build_delete_bearer_request(&pkbuf, h.type, bearer); - ogs_assert(rv == OGS_OK); + pkbuf = pgw_s5c_build_delete_bearer_request(h.type, bearer); + ogs_expect_or_return(pkbuf); xact = ogs_gtp_xact_local_create( sess->gnode, &h, pkbuf, timeout, sess); - ogs_assert(xact); + ogs_expect_or_return(xact); rv = ogs_gtp_xact_commit(xact); - ogs_assert(rv == OGS_OK); - - return OGS_OK; + ogs_expect(rv == OGS_OK); + } else { + ogs_error("Invalid Type[%d]", pcc_rule->type); } - else - ogs_assert_if_reached(); } - - return OGS_OK; } diff --git a/src/pgw/pgw-s5c-build.c b/src/pgw/pgw-s5c-build.c index c503598565..ff54cb831f 100644 --- a/src/pgw/pgw-s5c-build.c +++ b/src/pgw/pgw-s5c-build.c @@ -24,8 +24,8 @@ static int16_t pgw_pco_build(uint8_t *pco_buf, ogs_tlv_pco_t *tlv_pco); -int pgw_s5c_build_create_session_response( - ogs_pkbuf_t **pkbuf, uint8_t type, pgw_sess_t *sess, +ogs_pkbuf_t *pgw_s5c_build_create_session_response( + uint8_t type, pgw_sess_t *sess, ogs_diam_gx_message_t *gx_message, ogs_gtp_create_session_request_t *req) { @@ -130,19 +130,13 @@ int pgw_s5c_build_create_session_response( rsp->bearer_contexts_created.s5_s8_u_sgw_f_teid.len = len; gtp_message.h.type = type; - rv = ogs_gtp_build_msg(pkbuf, >p_message); - ogs_assert(rv == OGS_OK); - - return OGS_OK; + return ogs_gtp_build_msg(>p_message); } -int pgw_s5c_build_delete_session_response( - ogs_pkbuf_t **pkbuf, uint8_t type, - ogs_diam_gx_message_t *gx_message, +ogs_pkbuf_t *pgw_s5c_build_delete_session_response( + uint8_t type, ogs_diam_gx_message_t *gx_message, ogs_gtp_delete_session_request_t *req) { - int rv; - ogs_gtp_message_t gtp_message; ogs_gtp_delete_session_response_t *rsp = NULL; @@ -180,10 +174,7 @@ int pgw_s5c_build_delete_session_response( /* build */ gtp_message.h.type = type; - rv = ogs_gtp_build_msg(pkbuf, >p_message); - ogs_assert(rv == OGS_OK); - - return OGS_OK; + return ogs_gtp_build_msg(>p_message); } static void encode_traffic_flow_template( @@ -289,8 +280,8 @@ static void encode_traffic_flow_template( tft->num_of_packet_filter = i; } -int pgw_s5c_build_create_bearer_request( - ogs_pkbuf_t **pkbuf, uint8_t type, pgw_bearer_t *bearer) +ogs_pkbuf_t *pgw_s5c_build_create_bearer_request( + uint8_t type, pgw_bearer_t *bearer) { int rv; pgw_sess_t *sess = NULL; @@ -363,17 +354,13 @@ int pgw_s5c_build_create_bearer_request( &tft, tft_buf, OGS_GTP_MAX_TRAFFIC_FLOW_TEMPLATE); gtp_message.h.type = type; - rv = ogs_gtp_build_msg(pkbuf, >p_message); - ogs_assert(rv == OGS_OK); - - return OGS_OK; + return ogs_gtp_build_msg(>p_message); } -int pgw_s5c_build_update_bearer_request( - ogs_pkbuf_t **pkbuf, uint8_t type, pgw_bearer_t *bearer, +ogs_pkbuf_t *pgw_s5c_build_update_bearer_request( + uint8_t type, pgw_bearer_t *bearer, int qos_presence, int tft_presence) { - int rv; pgw_sess_t *sess = NULL; pgw_bearer_t *linked_bearer = NULL; @@ -430,16 +417,12 @@ int pgw_s5c_build_update_bearer_request( } gtp_message.h.type = type; - rv = ogs_gtp_build_msg(pkbuf, >p_message); - ogs_assert(rv == OGS_OK); - - return OGS_OK; + return ogs_gtp_build_msg(>p_message); } -int pgw_s5c_build_delete_bearer_request( - ogs_pkbuf_t **pkbuf, uint8_t type, pgw_bearer_t *bearer) +ogs_pkbuf_t *pgw_s5c_build_delete_bearer_request( + uint8_t type, pgw_bearer_t *bearer) { - int rv; pgw_sess_t *sess = NULL; pgw_bearer_t *linked_bearer = NULL; @@ -469,10 +452,7 @@ int pgw_s5c_build_delete_bearer_request( } gtp_message.h.type = type; - rv = ogs_gtp_build_msg(pkbuf, >p_message); - ogs_assert(rv == OGS_OK); - - return OGS_OK; + return ogs_gtp_build_msg(>p_message); } static int16_t pgw_pco_build(uint8_t *pco_buf, ogs_tlv_pco_t *tlv_pco) diff --git a/src/pgw/pgw-s5c-build.h b/src/pgw/pgw-s5c-build.h index 48cd58f0d2..e7602525c9 100644 --- a/src/pgw/pgw-s5c-build.h +++ b/src/pgw/pgw-s5c-build.h @@ -26,22 +26,21 @@ extern "C" { #endif -int pgw_s5c_build_create_session_response( - ogs_pkbuf_t **pkbuf, uint8_t type, pgw_sess_t *sess, +ogs_pkbuf_t *pgw_s5c_build_create_session_response( + uint8_t type, pgw_sess_t *sess, ogs_diam_gx_message_t *gx_message, ogs_gtp_create_session_request_t *req); -int pgw_s5c_build_delete_session_response( - ogs_pkbuf_t **pkbuf, uint8_t type, - ogs_diam_gx_message_t *gx_message, +ogs_pkbuf_t *pgw_s5c_build_delete_session_response( + uint8_t type, ogs_diam_gx_message_t *gx_message, ogs_gtp_delete_session_request_t *req); -int pgw_s5c_build_create_bearer_request( - ogs_pkbuf_t **pkbuf, uint8_t type, pgw_bearer_t *bearer); -int pgw_s5c_build_update_bearer_request( - ogs_pkbuf_t **pkbuf, uint8_t type, pgw_bearer_t *bearer, +ogs_pkbuf_t *pgw_s5c_build_create_bearer_request( + uint8_t type, pgw_bearer_t *bearer); +ogs_pkbuf_t *pgw_s5c_build_update_bearer_request( + uint8_t type, pgw_bearer_t *bearer, int qos_presence, int tft_presence); -int pgw_s5c_build_delete_bearer_request( - ogs_pkbuf_t **pkbuf, uint8_t type, pgw_bearer_t *bearer); +ogs_pkbuf_t *pgw_s5c_build_delete_bearer_request( + uint8_t type, pgw_bearer_t *bearer); #ifdef __cplusplus } #endif diff --git a/src/pgw/pgw-s5c-handler.c b/src/pgw/pgw-s5c-handler.c index 98bbc6a3dc..031c20e582 100644 --- a/src/pgw/pgw-s5c-handler.c +++ b/src/pgw/pgw-s5c-handler.c @@ -239,7 +239,7 @@ void pgw_s5c_handle_create_bearer_response( OGS_SETUP_GTP_NODE(bearer, sgw); rv = ogs_gtp_xact_commit(xact); - ogs_assert(rv == OGS_OK); + ogs_expect(rv == OGS_OK); ogs_debug("[PGW] Create Bearer Response : SGW[0x%x] --> PGW[0x%x]", sess->sgw_s5c_teid, sess->pgw_s5c_teid); @@ -268,7 +268,7 @@ void pgw_s5c_handle_update_bearer_response( } rv = ogs_gtp_xact_commit(xact); - ogs_assert(rv == OGS_OK); + ogs_expect(rv == OGS_OK); ogs_debug("[PGW] Update Bearer Response : SGW[0x%x] --> PGW[0x%x]", sess->sgw_s5c_teid, sess->pgw_s5c_teid); @@ -302,7 +302,7 @@ void pgw_s5c_handle_delete_bearer_response( ogs_assert(bearer); rv = ogs_gtp_xact_commit(xact); - ogs_assert(rv == OGS_OK); + ogs_expect(rv == OGS_OK); ogs_debug("[PGW] Delete Bearer Response : SGW[0x%x] --> PGW[0x%x]", sess->sgw_s5c_teid, sess->pgw_s5c_teid); diff --git a/src/sgw/sgw-gtp-path.c b/src/sgw/sgw-gtp-path.c index e0a3b48baf..b7e153b29c 100644 --- a/src/sgw/sgw-gtp-path.c +++ b/src/sgw/sgw-gtp-path.c @@ -358,7 +358,7 @@ void sgw_gtp_close(void) ogs_pkbuf_pool_destroy(packet_pool); } -int sgw_gtp_send_end_marker(sgw_tunnel_t *s1u_tunnel) +void sgw_gtp_send_end_marker(sgw_tunnel_t *s1u_tunnel) { char buf[OGS_ADDRSTRLEN]; int rv; @@ -390,8 +390,5 @@ int sgw_gtp_send_end_marker(sgw_tunnel_t *s1u_tunnel) h->teid = htonl(s1u_tunnel->remote_teid); rv = ogs_gtp_sendto(s1u_tunnel->gnode, pkbuf); - ogs_assert(rv == OGS_OK); - ogs_pkbuf_free(pkbuf); - - return rv; + ogs_expect(rv == OGS_OK); } diff --git a/src/sgw/sgw-gtp-path.h b/src/sgw/sgw-gtp-path.h index 43afdb6797..983c0916ba 100644 --- a/src/sgw/sgw-gtp-path.h +++ b/src/sgw/sgw-gtp-path.h @@ -27,7 +27,7 @@ extern "C" { int sgw_gtp_open(void); void sgw_gtp_close(void); -int sgw_gtp_send_end_marker(sgw_tunnel_t *s1u_tunnel); +void sgw_gtp_send_end_marker(sgw_tunnel_t *s1u_tunnel); #ifdef __cplusplus } diff --git a/src/sgw/sgw-s11-handler.c b/src/sgw/sgw-s11-handler.c index 90005c6ed6..1e44cfb8a8 100644 --- a/src/sgw/sgw-s11-handler.c +++ b/src/sgw/sgw-s11-handler.c @@ -193,17 +193,17 @@ void sgw_s11_handle_create_session_request(ogs_gtp_xact_t *s11_xact, message->h.type = OGS_GTP_CREATE_SESSION_REQUEST_TYPE; message->h.teid = sess->pgw_s5c_teid; - rv = ogs_gtp_build_msg(&pkbuf, message); - ogs_assert(rv == OGS_OK); + pkbuf = ogs_gtp_build_msg(message); + ogs_expect_or_return(pkbuf); s5c_xact = ogs_gtp_xact_local_create( sess->gnode, &message->h, pkbuf, timeout, sess); - ogs_assert(s5c_xact); + ogs_expect_or_return(s5c_xact); ogs_gtp_xact_associate(s11_xact, s5c_xact); rv = ogs_gtp_xact_commit(s5c_xact); - ogs_assert(rv == OGS_OK); + ogs_expect(rv == OGS_OK); } void sgw_s11_handle_modify_bearer_request(ogs_gtp_xact_t *s11_xact, @@ -349,9 +349,7 @@ void sgw_s11_handle_modify_bearer_request(ogs_gtp_xact_t *s11_xact, ogs_debug("[SGW] SEND End Marker to ENB[%s]: TEID[0x%x]", OGS_ADDR(&s1u_tunnel->gnode->remote_addr, buf), s1u_tunnel->remote_teid); - rv = sgw_gtp_send_end_marker(s1u_tunnel); - if (rv != OGS_OK) - ogs_error("gtp send end marker failed"); + sgw_gtp_send_end_marker(s1u_tunnel); } /* Setup GTP Node */ @@ -363,14 +361,14 @@ void sgw_s11_handle_modify_bearer_request(ogs_gtp_xact_t *s11_xact, message.h.type = OGS_GTP_MODIFY_BEARER_RESPONSE_TYPE; message.h.teid = sgw_ue->mme_s11_teid; - rv = ogs_gtp_build_msg(&pkbuf, &message); - ogs_assert(rv == OGS_OK); + pkbuf = ogs_gtp_build_msg(&message); + ogs_expect_or_return(pkbuf); rv = ogs_gtp_xact_update_tx(s11_xact, &message.h, pkbuf); - ogs_assert(rv == OGS_OK); + ogs_expect_or_return(rv == OGS_OK); rv = ogs_gtp_xact_commit(s11_xact); - ogs_assert(rv == OGS_OK); + ogs_expect(rv == OGS_OK); } void sgw_s11_handle_delete_session_request(ogs_gtp_xact_t *s11_xact, @@ -417,17 +415,17 @@ void sgw_s11_handle_delete_session_request(ogs_gtp_xact_t *s11_xact, message->h.type = OGS_GTP_DELETE_SESSION_REQUEST_TYPE; message->h.teid = sess->pgw_s5c_teid; - rv = ogs_gtp_build_msg(&pkbuf, message); - ogs_assert(rv == OGS_OK); + pkbuf = ogs_gtp_build_msg(message); + ogs_expect_or_return(pkbuf); s5c_xact = ogs_gtp_xact_local_create( sess->gnode, &message->h, pkbuf, timeout, sess); - ogs_assert(s5c_xact); + ogs_expect_or_return(s5c_xact); ogs_gtp_xact_associate(s11_xact, s5c_xact); rv = ogs_gtp_xact_commit(s5c_xact); - ogs_assert(rv == OGS_OK); + ogs_expect(rv == OGS_OK); } void sgw_s11_handle_create_bearer_response(ogs_gtp_xact_t *s11_xact, @@ -467,7 +465,7 @@ void sgw_s11_handle_create_bearer_response(ogs_gtp_xact_t *s11_xact, } rv = ogs_gtp_xact_commit(s11_xact); - ogs_assert(rv == OGS_OK); + ogs_expect(rv == OGS_OK); req = &message->create_bearer_response; @@ -601,14 +599,14 @@ void sgw_s11_handle_create_bearer_response(ogs_gtp_xact_t *s11_xact, message->h.type = OGS_GTP_CREATE_BEARER_RESPONSE_TYPE; message->h.teid = sess->pgw_s5c_teid; - rv = ogs_gtp_build_msg(&pkbuf, message); - ogs_assert(rv == OGS_OK); + pkbuf = ogs_gtp_build_msg(message); + ogs_expect_or_return(pkbuf); rv = ogs_gtp_xact_update_tx(s5c_xact, &message->h, pkbuf); - ogs_assert(s5c_xact); + ogs_expect_or_return(rv == OGS_OK); rv = ogs_gtp_xact_commit(s5c_xact); - ogs_assert(rv == OGS_OK); + ogs_expect(rv == OGS_OK); } void sgw_s11_handle_update_bearer_response(ogs_gtp_xact_t *s11_xact, @@ -639,7 +637,7 @@ void sgw_s11_handle_update_bearer_response(ogs_gtp_xact_t *s11_xact, } rv = ogs_gtp_xact_commit(s11_xact); - ogs_assert(rv == OGS_OK); + ogs_expect(rv == OGS_OK); req = &message->update_bearer_response; @@ -701,14 +699,14 @@ void sgw_s11_handle_update_bearer_response(ogs_gtp_xact_t *s11_xact, message->h.type = OGS_GTP_UPDATE_BEARER_RESPONSE_TYPE; message->h.teid = sess->pgw_s5c_teid; - rv = ogs_gtp_build_msg(&pkbuf, message); - ogs_assert(rv == OGS_OK); + pkbuf = ogs_gtp_build_msg(message); + ogs_expect_or_return(pkbuf); rv = ogs_gtp_xact_update_tx(s5c_xact, &message->h, pkbuf); - ogs_assert(s5c_xact); + ogs_expect_or_return(rv == OGS_OK); rv = ogs_gtp_xact_commit(s5c_xact); - ogs_assert(rv == OGS_OK); + ogs_expect(rv == OGS_OK); } void sgw_s11_handle_delete_bearer_response(ogs_gtp_xact_t *s11_xact, @@ -740,7 +738,7 @@ void sgw_s11_handle_delete_bearer_response(ogs_gtp_xact_t *s11_xact, } rv = ogs_gtp_xact_commit(s11_xact); - ogs_assert(rv == OGS_OK); + ogs_expect(rv == OGS_OK); req = &message->delete_bearer_response; @@ -802,14 +800,14 @@ void sgw_s11_handle_delete_bearer_response(ogs_gtp_xact_t *s11_xact, message->h.type = OGS_GTP_DELETE_BEARER_RESPONSE_TYPE; message->h.teid = sess->pgw_s5c_teid; - rv = ogs_gtp_build_msg(&pkbuf, message); - ogs_assert(rv == OGS_OK); + pkbuf = ogs_gtp_build_msg(message); + ogs_expect_or_return(pkbuf); rv = ogs_gtp_xact_update_tx(s5c_xact, &message->h, pkbuf); - ogs_assert(s5c_xact); + ogs_expect_or_return(rv == OGS_OK); rv = ogs_gtp_xact_commit(s5c_xact); - ogs_assert(rv == OGS_OK); + ogs_expect(rv == OGS_OK); sgw_bearer_remove(bearer); } @@ -881,14 +879,14 @@ void sgw_s11_handle_release_access_bearers_request(ogs_gtp_xact_t *s11_xact, message.h.type = OGS_GTP_RELEASE_ACCESS_BEARERS_RESPONSE_TYPE; message.h.teid = sgw_ue->mme_s11_teid; - rv = ogs_gtp_build_msg(&pkbuf, &message); - ogs_assert(rv == OGS_OK); + pkbuf = ogs_gtp_build_msg(&message); + ogs_expect_or_return(pkbuf); rv = ogs_gtp_xact_update_tx(s11_xact, &message.h, pkbuf); - ogs_assert(rv == OGS_OK); + ogs_expect_or_return(rv == OGS_OK); rv = ogs_gtp_xact_commit(s11_xact); - ogs_assert(rv == OGS_OK); + ogs_expect(rv == OGS_OK); } void sgw_s11_handle_lo_dldata_notification(sgw_bearer_t *bearer) @@ -926,15 +924,15 @@ void sgw_s11_handle_lo_dldata_notification(sgw_bearer_t *bearer) message.h.type = OGS_GTP_DOWNLINK_DATA_NOTIFICATION_TYPE; message.h.teid = sgw_ue->mme_s11_teid; - rv = ogs_gtp_build_msg(&pkbuf, &message); - ogs_assert(rv == OGS_OK); + pkbuf = ogs_gtp_build_msg(&message); + ogs_expect_or_return(pkbuf); xact = ogs_gtp_xact_local_create( sgw_ue->gnode, &message.h, pkbuf, timeout, sgw_ue); - ogs_assert(xact); + ogs_expect_or_return(xact); rv = ogs_gtp_xact_commit(xact); - ogs_assert(rv == OGS_OK); + ogs_expect(rv == OGS_OK); } void sgw_s11_handle_downlink_data_notification_ack( @@ -954,7 +952,7 @@ void sgw_s11_handle_downlink_data_notification_ack( } rv = ogs_gtp_xact_commit(s11_xact); - ogs_assert(rv == OGS_OK); + ogs_expect(rv == OGS_OK); ogs_debug(" MME_S11_TEID[%d] SGW_S11_TEID[%d]", sgw_ue->mme_s11_teid, sgw_ue->sgw_s11_teid); @@ -1121,14 +1119,14 @@ void sgw_s11_handle_create_indirect_data_forwarding_tunnel_request( OGS_GTP_CREATE_INDIRECT_DATA_FORWARDING_TUNNEL_RESPONSE_TYPE; message.h.teid = sgw_ue->mme_s11_teid; - rv = ogs_gtp_build_msg(&pkbuf, &message); - ogs_assert(rv == OGS_OK); + pkbuf = ogs_gtp_build_msg(&message); + ogs_expect_or_return(pkbuf); rv = ogs_gtp_xact_update_tx(s11_xact, &message.h, pkbuf); - ogs_assert(rv == OGS_OK); + ogs_expect_or_return(rv == OGS_OK); rv = ogs_gtp_xact_commit(s11_xact); - ogs_assert(rv == OGS_OK); + ogs_expect(rv == OGS_OK); } void sgw_s11_handle_delete_indirect_data_forwarding_tunnel_request( @@ -1203,12 +1201,12 @@ void sgw_s11_handle_delete_indirect_data_forwarding_tunnel_request( OGS_GTP_DELETE_INDIRECT_DATA_FORWARDING_TUNNEL_RESPONSE_TYPE; message.h.teid = sgw_ue->mme_s11_teid; - rv = ogs_gtp_build_msg(&pkbuf, &message); - ogs_assert(rv == OGS_OK); + pkbuf = ogs_gtp_build_msg(&message); + ogs_expect_or_return(pkbuf); rv = ogs_gtp_xact_update_tx(s11_xact, &message.h, pkbuf); - ogs_assert(rv == OGS_OK); + ogs_expect_or_return(rv == OGS_OK); rv = ogs_gtp_xact_commit(s11_xact); - ogs_assert(rv == OGS_OK); + ogs_expect(rv == OGS_OK); } diff --git a/src/sgw/sgw-s5c-handler.c b/src/sgw/sgw-s5c-handler.c index 019f95581a..48bac3b095 100644 --- a/src/sgw/sgw-s5c-handler.c +++ b/src/sgw/sgw-s5c-handler.c @@ -67,7 +67,7 @@ void sgw_s5c_handle_create_session_response(ogs_gtp_xact_t *s5c_xact, } rv = ogs_gtp_xact_commit(s5c_xact); - ogs_assert(rv == OGS_OK); + ogs_expect(rv == OGS_OK); rsp = &message->create_session_response; @@ -202,14 +202,14 @@ void sgw_s5c_handle_create_session_response(ogs_gtp_xact_t *s5c_xact, message->h.type = OGS_GTP_CREATE_SESSION_RESPONSE_TYPE; message->h.teid = sgw_ue->mme_s11_teid; - rv = ogs_gtp_build_msg(&pkbuf, message); - ogs_assert(rv == OGS_OK); + pkbuf = ogs_gtp_build_msg(message); + ogs_expect_or_return(pkbuf); rv = ogs_gtp_xact_update_tx(s11_xact, &message->h, pkbuf); - ogs_assert(rv == OGS_OK); + ogs_expect_or_return(rv == OGS_OK); rv = ogs_gtp_xact_commit(s11_xact); - ogs_assert(rv == OGS_OK); + ogs_expect(rv == OGS_OK); } void sgw_s5c_handle_delete_session_response(ogs_gtp_xact_t *s5c_xact, @@ -236,7 +236,7 @@ void sgw_s5c_handle_delete_session_response(ogs_gtp_xact_t *s5c_xact, } rv = ogs_gtp_xact_commit(s5c_xact); - ogs_assert(rv == OGS_OK); + ogs_expect(rv == OGS_OK); rsp = &message->delete_session_response; @@ -270,14 +270,14 @@ void sgw_s5c_handle_delete_session_response(ogs_gtp_xact_t *s5c_xact, message->h.type = OGS_GTP_DELETE_SESSION_RESPONSE_TYPE; message->h.teid = sgw_ue->mme_s11_teid; - rv = ogs_gtp_build_msg(&pkbuf, message); - ogs_assert(rv == OGS_OK); + pkbuf = ogs_gtp_build_msg(message); + ogs_expect_or_return(pkbuf); rv = ogs_gtp_xact_update_tx(s11_xact, &message->h, pkbuf); - ogs_assert(rv == OGS_OK); + ogs_expect_or_return(rv == OGS_OK); rv = ogs_gtp_xact_commit(s11_xact); - ogs_assert(rv == OGS_OK); + ogs_expect(rv == OGS_OK); } void sgw_s5c_handle_create_bearer_request(ogs_gtp_xact_t *s5c_xact, @@ -385,17 +385,17 @@ void sgw_s5c_handle_create_bearer_request(ogs_gtp_xact_t *s5c_xact, message->h.type = OGS_GTP_CREATE_BEARER_REQUEST_TYPE; message->h.teid = sgw_ue->mme_s11_teid; - rv = ogs_gtp_build_msg(&pkbuf, message); - ogs_assert(rv == OGS_OK); + pkbuf = ogs_gtp_build_msg(message); + ogs_expect_or_return(pkbuf); s11_xact = ogs_gtp_xact_local_create( sgw_ue->gnode, &message->h, pkbuf, timeout, sess); - ogs_assert(s11_xact); + ogs_expect_or_return(s11_xact); ogs_gtp_xact_associate(s5c_xact, s11_xact); rv = ogs_gtp_xact_commit(s11_xact); - ogs_assert(rv == OGS_OK); + ogs_expect(rv == OGS_OK); } void sgw_s5c_handle_update_bearer_request(ogs_gtp_xact_t *s5c_xact, @@ -447,17 +447,17 @@ void sgw_s5c_handle_update_bearer_request(ogs_gtp_xact_t *s5c_xact, message->h.type = OGS_GTP_UPDATE_BEARER_REQUEST_TYPE; message->h.teid = sgw_ue->mme_s11_teid; - rv = ogs_gtp_build_msg(&pkbuf, message); - ogs_assert(rv == OGS_OK); + pkbuf = ogs_gtp_build_msg(message); + ogs_expect_or_return(pkbuf); s11_xact = ogs_gtp_xact_local_create( sgw_ue->gnode, &message->h, pkbuf, timeout, sess); - ogs_assert(s11_xact); + ogs_expect_or_return(s11_xact); ogs_gtp_xact_associate(s5c_xact, s11_xact); rv = ogs_gtp_xact_commit(s11_xact); - ogs_assert(rv == OGS_OK); + ogs_expect(rv == OGS_OK); ogs_debug("[SGW] Update Bearer Request : SGW <-- PGW"); } @@ -508,16 +508,16 @@ void sgw_s5c_handle_delete_bearer_request(ogs_gtp_xact_t *s5c_xact, message->h.type = OGS_GTP_DELETE_BEARER_REQUEST_TYPE; message->h.teid = sgw_ue->mme_s11_teid; - rv = ogs_gtp_build_msg(&pkbuf, message); - ogs_assert(rv == OGS_OK); + pkbuf = ogs_gtp_build_msg(message); + ogs_expect_or_return(pkbuf); s11_xact = ogs_gtp_xact_local_create( sgw_ue->gnode, &message->h, pkbuf, timeout, sess); - ogs_assert(s11_xact); + ogs_expect_or_return(s11_xact); ogs_gtp_xact_associate(s5c_xact, s11_xact); rv = ogs_gtp_xact_commit(s11_xact); - ogs_assert(rv == OGS_OK); + ogs_expect(rv == OGS_OK); } diff --git a/tests/app/test-packet.c b/tests/app/test-packet.c index 8d6f96d80f..03c3c6b691 100644 --- a/tests/app/test-packet.c +++ b/tests/app/test-packet.c @@ -289,14 +289,11 @@ int tests1ap_build_setup_req( *PagingDRX = S1AP_PagingDRX_v64; - rv = ogs_s1ap_encode(pkbuf, &pdu); - ogs_s1ap_free(&pdu); - - if (rv != OGS_OK) { + *pkbuf = ogs_s1ap_encode(&pdu); + if (*pkbuf == NULL) { ogs_error("ogs_s1ap_encode() failed"); return OGS_ERROR; } - return OGS_OK; } @@ -1171,14 +1168,11 @@ int tests1ap_build_initial_context_setup_response( ogs_assert(rv == OGS_OK); ogs_s1ap_uint32_to_OCTET_STRING(teid, &e_rab->gTP_TEID); - rv = ogs_s1ap_encode(pkbuf, &pdu); - ogs_s1ap_free(&pdu); - - if (rv != OGS_OK) { + *pkbuf = ogs_s1ap_encode(&pdu); + if (*pkbuf == NULL) { ogs_error("ogs_s1ap_encode() failed"); return OGS_ERROR; } - return OGS_OK; } @@ -1235,14 +1229,11 @@ int tests1ap_build_ue_context_modification_response( *MME_UE_S1AP_ID = mme_ue_s1ap_id; *ENB_UE_S1AP_ID = enb_ue_s1ap_id; - rv = ogs_s1ap_encode(pkbuf, &pdu); - ogs_s1ap_free(&pdu); - - if (rv != OGS_OK) { + *pkbuf = ogs_s1ap_encode(&pdu); + if (*pkbuf == NULL) { ogs_error("ogs_s1ap_encode() failed"); return OGS_ERROR; } - return OGS_OK; } @@ -2140,14 +2131,11 @@ int tests1ap_build_e_rab_setup_response( ogs_assert(rv == OGS_OK); ogs_s1ap_uint32_to_OCTET_STRING(teid, &e_rab->gTP_TEID); - rv = ogs_s1ap_encode(pkbuf, &pdu); - ogs_s1ap_free(&pdu); - - if (rv != OGS_OK) { + *pkbuf = ogs_s1ap_encode(&pdu); + if (*pkbuf == NULL) { ogs_error("ogs_s1ap_encode() failed"); return OGS_ERROR; } - return OGS_OK; } @@ -2594,14 +2582,11 @@ int tests1ap_build_path_switch_request( UESecurityCapabilities->integrityProtectionAlgorithms.buf[0] = (mme_ue->ue_network_capability.eia << 1); - rv = ogs_s1ap_encode(pkbuf, &pdu); - ogs_s1ap_free(&pdu); - - if (rv != OGS_OK) { + *pkbuf = ogs_s1ap_encode(&pdu); + if (*pkbuf == NULL) { ogs_error("ogs_s1ap_encode() failed"); return OGS_ERROR; } - return OGS_OK; } @@ -2847,14 +2832,11 @@ int tests1ap_build_handover_request_ack( OGS_HEX(payload, strlen(payload), hexbuf), 132, Target_ToSource_TransparentContainer); - rv = ogs_s1ap_encode(pkbuf, &pdu); - ogs_s1ap_free(&pdu); - - if (rv != OGS_OK) { + *pkbuf = ogs_s1ap_encode(&pdu); + if (*pkbuf == NULL) { ogs_error("ogs_s1ap_encode() failed"); return OGS_ERROR; } - return OGS_OK; } diff --git a/tests/simple/attach-test.c b/tests/simple/attach-test.c index 95be8a3fb5..7366ebedf3 100644 --- a/tests/simple/attach-test.c +++ b/tests/simple/attach-test.c @@ -1523,7 +1523,7 @@ static void attach_test5(abts_case *tc, void *data) mme_ue_s1ap_id = CALLOC(1, sizeof(S1AP_MME_UE_S1AP_ID_t)); ogs_assert(mme_ue_s1ap_id); *mme_ue_s1ap_id = 2; - rv = s1ap_build_s1_reset_partial(&sendbuf, + sendbuf = s1ap_build_s1_reset_partial( S1AP_Cause_PR_radioNetwork, S1AP_CauseRadioNetwork_release_due_to_eutran_generated_reason, mme_ue_s1ap_id, NULL); diff --git a/tests/unit/crash-test.c b/tests/unit/crash-test.c index 93b342b684..0d3d6396a8 100644 --- a/tests/unit/crash-test.c +++ b/tests/unit/crash-test.c @@ -238,8 +238,7 @@ static void test1_func(abts_case *tc, void *data) ogs_s1ap_buffer_to_OCTET_STRING(buf, size, UERadioCapability); } - rv = ogs_s1ap_encode(&s1apbuf, &pdu); - ogs_s1ap_free(&pdu); + s1apbuf = ogs_s1ap_encode(&pdu); ogs_pkbuf_free(s1apbuf); ABTS_INT_EQUAL(tc, OGS_OK, rv); @@ -249,6 +248,7 @@ static int test_build_mme_configuration_transfer( S1AP_SONConfigurationTransfer_t *son_configuration_transfer) { int rv; + ogs_pkbuf_t *s1apbuf; S1AP_S1AP_PDU_t pdu; S1AP_InitiatingMessage_t *initiatingMessage = NULL; @@ -288,10 +288,7 @@ static int test_build_mme_configuration_transfer( son_configuration_transfer, SONConfigurationTransfer); ogs_assert(rv == OGS_OK); - ogs_pkbuf_t *s1apbuf; - rv = ogs_s1ap_encode(&s1apbuf, &pdu); - ogs_s1ap_free(&pdu); - + s1apbuf = ogs_s1ap_encode(&pdu); ogs_pkbuf_free(s1apbuf); return OGS_OK; diff --git a/tests/unit/gtp-message-test.c b/tests/unit/gtp-message-test.c index 2d25ab82e6..a0d30ae613 100644 --- a/tests/unit/gtp-message-test.c +++ b/tests/unit/gtp-message-test.c @@ -178,9 +178,9 @@ static void gtp_message_test1(abts_case *tc, void *data) req.charging_characteristics.data = (uint8_t *)"\x54\x00"; req.charging_characteristics.len = 2; - rv = ogs_tlv_build_msg(&pkbuf, &ogs_tlv_desc_create_session_request, &req, + pkbuf = ogs_tlv_build_msg(&ogs_tlv_desc_create_session_request, &req, OGS_TLV_MODE_T1_L2_I1); - ABTS_INT_EQUAL(tc, OGS_OK, rv); + ABTS_PTR_NOTNULL(tc, pkbuf); ABTS_TRUE(tc, memcmp(pkbuf->data, OGS_HEX(_payload, strlen(_payload), hexbuf), pkbuf->len) == 0); diff --git a/tests/unit/nas-message-test.c b/tests/unit/nas-message-test.c index 81384459b6..d3489aebf4 100644 --- a/tests/unit/nas-message-test.c +++ b/tests/unit/nas-message-test.c @@ -123,8 +123,7 @@ static void ogs_nas_message_test2(abts_case *tc, void *data) attach_accept->eps_network_feature_support.emc_bs = 1; attach_accept->eps_network_feature_support.ims_vops = 1; - rv = ogs_nas_plain_encode(&pkbuf, &message); - ABTS_INT_EQUAL(tc, OGS_OK, rv); + pkbuf = ogs_nas_plain_encode(&message); ABTS_INT_EQUAL(tc, sizeof(buffer), pkbuf->len); ogs_log_hexdump(OGS_LOG_DEBUG, pkbuf->data, pkbuf->len); ABTS_TRUE(tc, memcmp(OGS_HEX(payload, strlen(payload), buffer), @@ -171,8 +170,7 @@ static void ogs_nas_message_test4(abts_case *tc, void *data) message.emm.h.message_type = OGS_NAS_ATTACH_REJECT; attach_reject->emm_cause = EMM_CAUSE_NETWORK_FAILURE; - rv = ogs_nas_plain_encode(&pkbuf, &message); - ABTS_INT_EQUAL(tc, OGS_OK, rv); + pkbuf = ogs_nas_plain_encode(&message); ABTS_INT_EQUAL(tc, sizeof(buffer), pkbuf->len); ABTS_TRUE(tc, memcmp(OGS_HEX(payload, strlen(payload), buffer), pkbuf->data, pkbuf->len) == 0); @@ -259,8 +257,7 @@ static void ogs_nas_message_test7(abts_case *tc, void *data) identity_response->mobile_identity.imsi.digit14 = 1; identity_response->mobile_identity.imsi.digit15 = 5; - rv = ogs_nas_plain_encode(&pkbuf, &message); - ABTS_INT_EQUAL(tc, OGS_OK, rv); + pkbuf = ogs_nas_plain_encode(&message); ABTS_INT_EQUAL(tc, sizeof(buffer), pkbuf->len); ABTS_TRUE(tc, memcmp(OGS_HEX(payload, strlen(payload), buffer), pkbuf->data, pkbuf->len) == 0); @@ -307,8 +304,7 @@ static void ogs_nas_message_test8(abts_case *tc, void *data) ksi_and_sequence_number->sequence_number = 8; service_request->message_authentication_code = 0x640c; - rv = ogs_nas_plain_encode(&pkbuf, &message); - ABTS_INT_EQUAL(tc, OGS_OK, rv); + pkbuf = ogs_nas_plain_encode(&message); ABTS_INT_EQUAL(tc, sizeof(buffer), pkbuf->len); ABTS_TRUE(tc, memcmp(OGS_HEX(payload, strlen(payload), buffer), pkbuf->data, pkbuf->len) == 0); diff --git a/tests/unit/s1ap-message-test.c b/tests/unit/s1ap-message-test.c index fb452ae426..d164df8e5c 100644 --- a/tests/unit/s1ap-message-test.c +++ b/tests/unit/s1ap-message-test.c @@ -97,9 +97,8 @@ static void s1ap_message_test4(abts_case *tc, void *data) mme_self()->served_gummei[0].num_of_mme_gid = 1; mme_self()->served_gummei[0].num_of_mme_code = 1; - rv = s1ap_build_setup_rsp(&pkbuf); + pkbuf = s1ap_build_setup_rsp(); - ABTS_INT_EQUAL(tc, OGS_OK, rv); ABTS_PTR_NOTNULL(tc, pkbuf); ABTS_PTR_NOTNULL(tc, pkbuf->data); ABTS_INT_EQUAL(tc, 27, pkbuf->len); @@ -157,8 +156,7 @@ static void s1ap_message_test6(abts_case *tc, void *data) for (i = 0; i < emmbuf->len; i++) ((char *)emmbuf->data)[i] = 0xef; - rv = s1ap_build_downlink_nas_transport(&s1apbuf, &enb_ue, emmbuf); - ABTS_INT_EQUAL(tc, OGS_OK, rv); + s1apbuf = s1ap_build_downlink_nas_transport(&enb_ue, emmbuf); ABTS_TRUE(tc, memcmp(OGS_HEX(_result, strlen(_result), buffer), s1apbuf->data, s1apbuf->len) == 0); ogs_pkbuf_free(s1apbuf);