Review ogs_expect() (#314)

This commit is contained in:
Sukchan Lee 2019-11-30 16:45:09 +09:00
parent 2cd9f496e2
commit 636170e0da
57 changed files with 1153 additions and 1669 deletions

View File

@ -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,
&gtp_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,
&gtp_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,
&gtp_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,
&gtp_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,
&gtp_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,
&gtp_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,
&gtp_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,
&gtp_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,
&gtp_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,
&gtp_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,
&gtp_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,
&gtp_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,
&gtp_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,
&gtp_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,
&gtp_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,
&gtp_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,
&gtp_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,
&gtp_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,
&gtp_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,
&gtp_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,
&gtp_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,
&gtp_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,
&gtp_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,
&gtp_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,
&gtp_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,
&gtp_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,
&gtp_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,
&gtp_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,
&gtp_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,
&gtp_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,
&gtp_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,
&gtp_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,
&gtp_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,
&gtp_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,
&gtp_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,
&gtp_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,
&gtp_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,
&gtp_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,
&gtp_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,
&gtp_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,
&gtp_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,
&gtp_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,
&gtp_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,
&gtp_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,
&gtp_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,
&gtp_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,
&gtp_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,
&gtp_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,
&gtp_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,
&gtp_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,
&gtp_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,
&gtp_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,
&gtp_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,
&gtp_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,
&gtp_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,
&gtp_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,
&gtp_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,
&gtp_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;
}

View File

@ -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
}

View File

@ -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);
}

View File

@ -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(" &gtp_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(" &gtp_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;
}
""")

View File

@ -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,

View File

@ -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
}

View File

@ -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;
}

View File

@ -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)--;
}

View File

@ -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
******************************************************************************/

View File

@ -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;
}

View File

@ -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
******************************************************************************/

View File

@ -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
******************************************************************************/

View File

@ -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
}

View File

@ -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;
}
""")

View File

@ -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)

View File

@ -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

View File

@ -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);
}

View File

@ -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
}

View File

@ -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);
}

View File

@ -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:

View File

@ -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);
}

View File

@ -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

View File

@ -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;
}

View File

@ -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:

View File

@ -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;
}

View File

@ -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

View File

@ -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, &gtp_message);
ogs_expect(rv == OGS_OK);
return OGS_OK;
return ogs_gtp_build_msg(&gtp_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, &gtp_message);
ogs_expect(rv == OGS_OK);
return OGS_OK;
return ogs_gtp_build_msg(&gtp_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 = &gtp_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, &gtp_message);
ogs_expect(rv == OGS_OK);
return OGS_OK;
return ogs_gtp_build_msg(&gtp_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, &gtp_message);
ogs_expect(rv == OGS_OK);
return OGS_OK;
return ogs_gtp_build_msg(&gtp_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 = &gtp_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, &gtp_message);
ogs_assert(rv == OGS_OK);
return OGS_OK;
return ogs_gtp_build_msg(&gtp_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 = &gtp_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, &gtp_message);
ogs_expect(rv == OGS_OK);
return OGS_OK;
return ogs_gtp_build_msg(&gtp_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 =
&gtp_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, &gtp_message);
ogs_expect(rv == OGS_OK);
return OGS_OK;
return ogs_gtp_build_msg(&gtp_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 =
&gtp_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, &gtp_message);
ogs_expect(rv == OGS_OK);
return OGS_OK;
return ogs_gtp_build_msg(&gtp_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, &gtp_message);
ogs_expect(rv == OGS_OK);
return OGS_OK;
return ogs_gtp_build_msg(&gtp_message);
}

View File

@ -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
}

View File

@ -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;

View File

@ -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,

View File

@ -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();

View File

@ -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;
}

View File

@ -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

View File

@ -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,

View File

@ -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);

View File

@ -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);
}

View File

@ -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
}

View File

@ -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);
}

View File

@ -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;
}

View File

@ -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);

View File

@ -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(

View File

@ -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;
}

View File

@ -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
}

View File

@ -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;
}

View File

@ -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, &gtp_message);
ogs_assert(rv == OGS_OK);
return OGS_OK;
return ogs_gtp_build_msg(&gtp_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, &gtp_message);
ogs_assert(rv == OGS_OK);
return OGS_OK;
return ogs_gtp_build_msg(&gtp_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, &gtp_message);
ogs_assert(rv == OGS_OK);
return OGS_OK;
return ogs_gtp_build_msg(&gtp_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, &gtp_message);
ogs_assert(rv == OGS_OK);
return OGS_OK;
return ogs_gtp_build_msg(&gtp_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, &gtp_message);
ogs_assert(rv == OGS_OK);
return OGS_OK;
return ogs_gtp_build_msg(&gtp_message);
}
static int16_t pgw_pco_build(uint8_t *pco_buf, ogs_tlv_pco_t *tlv_pco)

View File

@ -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

View File

@ -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);

View File

@ -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);
}

View File

@ -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
}

View File

@ -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);
}

View File

@ -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);
}

View File

@ -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;
}

View File

@ -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);

View File

@ -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;

View File

@ -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);

View File

@ -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);

View File

@ -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);