Files
2018-06-25 18:23:36 +02:00

1059 lines
33 KiB
C

/*
* Licensed to the OpenAirInterface (OAI) Software Alliance under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The OpenAirInterface Software Alliance licenses this file to You under
* the OAI Public License, Version 1.1 (the "License"); you may not use this file
* except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.openairinterface.org/?page_id=698
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*-------------------------------------------------------------------------------
* For more information about the OpenAirInterface (OAI) Software Alliance:
* contact@openairinterface.org
*/
/*****************************************************************************
Eurecom OpenAirInterface 3
Copyright(c) 2012 Eurecom
Source nas_process.c
Version 0.1
Date 2013/04/16
Product Access-Stratum sublayer simulator
Subsystem NAS message processing
Author Frederic Maurel
Description Defines functions executed by the Access-Stratum sublayer
upon receiving NAS messages.
*****************************************************************************/
#include "nas_process.h"
#include "nas_data.h"
#include "nas_message.h"
#include <stdio.h> // snprintf
#include <string.h> // memset
/****************************************************************************/
/**************** E X T E R N A L D E F I N I T I O N S ****************/
/****************************************************************************/
/****************************************************************************/
/******************* L O C A L D E F I N I T I O N S *******************/
/****************************************************************************/
/*
*-----------------------------------------------------------------------------
* Functions used to process EPS Mobility Management messages
*-----------------------------------------------------------------------------
*/
static int _nas_process_emm(char* buffer, int length, const EMM_msg* msg);
static int _attach_request(char* buffer, int length, const attach_request_msg* msg);
static int _attach_accept(char* buffer, int length, const attach_accept_msg* msg);
static int _attach_reject(char* buffer, int length, const attach_reject_msg* msg);
static int _attach_complete(char* buffer, int length, const attach_complete_msg* msg);
static int _detach_request(char* buffer, int length, const detach_request_msg* msg);
static int _detach_accept(char* buffer, int length, const detach_accept_msg* msg);
static int _identity_request(char* buffer, int length, const identity_request_msg* msg);
static int _identity_response(char* buffer, int length, const identity_response_msg* msg);
static int _authentication_request(char* buffer, int length, const authentication_request_msg* msg);
static int _authentication_response(char* buffer, int length, const authentication_response_msg* msg);
static int _authentication_failure(char* buffer, int length, const authentication_failure_msg* msg);
static int _authentication_reject(char* buffer, int length, const authentication_reject_msg* msg);
static int _security_mode_command(char* buffer, int length, const security_mode_command_msg* msg);
static int _security_mode_complete(char* buffer, int length, const security_mode_complete_msg* msg);
static int _security_mode_reject(char* buffer, int length, const security_mode_reject_msg* msg);
static int _esm_message_container(char* buffer, int length, const EsmMessageContainer* msg);
static int _emm_status(char* buffer, int length, const emm_status_msg* msg);
/*
*-----------------------------------------------------------------------------
* Functions used to process EPS Session Management messages
*-----------------------------------------------------------------------------
*/
static int _nas_process_esm(char* buffer, int length, const ESM_msg* msg);
static int _pdn_connectivity_request(char* buffer, int length, const pdn_connectivity_request_msg* msg);
static int _pdn_connectivity_reject(char* buffer, int length, const pdn_connectivity_reject_msg* msg);
static int _pdn_disconnect_request(char* buffer, int length, const pdn_disconnect_request_msg* msg);
static int _pdn_disconnect_reject(char* buffer, int length, const pdn_disconnect_reject_msg* msg);
static int _activate_default_eps_bearer_context_request(char* buffer, int length, const activate_default_eps_bearer_context_request_msg* msg);
static int _activate_default_eps_bearer_context_accept(char* buffer, int length, const activate_default_eps_bearer_context_accept_msg* msg);
static int _activate_default_eps_bearer_context_reject(char* buffer, int length, const activate_default_eps_bearer_context_reject_msg* msg);
static int _activate_dedicated_eps_bearer_context_request(char* buffer, int length, const activate_dedicated_eps_bearer_context_request_msg* msg);
static int _activate_dedicated_eps_bearer_context_accept(char* buffer, int length, const activate_dedicated_eps_bearer_context_accept_msg* msg);
static int _activate_dedicated_eps_bearer_context_reject(char* buffer, int length, const activate_dedicated_eps_bearer_context_reject_msg* msg);
static int _deactivate_eps_bearer_context_request(char* buffer, int length, const deactivate_eps_bearer_context_request_msg* msg);
static int _deactivate_eps_bearer_context_accept(char* buffer, int length, const deactivate_eps_bearer_context_accept_msg* msg);
static int _esm_status(char* buffer, int length, const esm_status_msg* msg);
/****************************************************************************/
/****************** E X P O R T E D F U N C T I O N S ******************/
/****************************************************************************/
/*
*-----------------------------------------------------------------------------
* Process NAS message
*-----------------------------------------------------------------------------
*/
int
nas_process(
char* buffer,
int length,
const char* msg,
int size)
{
int index = 0;
int bytes;
nas_message_t nas_msg;
/* Decode NAS message */
memset(&nas_msg, 0, sizeof(nas_message_t));
bytes = nas_message_decode(msg, &nas_msg, size);
if (bytes < 0) {
printf("ERROR\t: %s - Failed to decode NAS message (err=%d)\n",
__FUNCTION__, bytes);
return (RETURNerror);
}
int protocol_discriminator = nas_msg.header.protocol_discriminator;
if (protocol_discriminator == EPS_MOBILITY_MANAGEMENT_MESSAGE) {
/* Process EPS Mobility Management NAS message */
index += _nas_process_emm(buffer + index,
length - index,
&nas_msg.plain.emm);
} else if (protocol_discriminator == EPS_SESSION_MANAGEMENT_MESSAGE) {
/* Process EPS Session Management NAS message */
index += _nas_process_esm(buffer + index,
length - index,
&nas_msg.plain.esm);
} else {
printf("ERROR\t: %s - Protocol discriminator is not valid (%d)\n",
__FUNCTION__, protocol_discriminator);
return (RETURNerror);
}
buffer[index] = '\0';
return (bytes);
}
/****************************************************************************/
/********************* L O C A L F U N C T I O N S *********************/
/****************************************************************************/
/*
* =============================================================================
* Functions used to process EPS Mobility Management messages
* =============================================================================
*/
/*
*-----------------------------------------------------------------------------
* Process EPS Mobility Management NAS message
*-----------------------------------------------------------------------------
*/
static int
_nas_process_emm(
char* buffer,
int length,
const EMM_msg* msg)
{
int index = 0;
const EsmMessageContainer* esm_container = NULL;
printf("INFO\t: Process %s\n", emmMsgType(msg->header.message_type));
index += snprintf(buffer + index, length - index, "%s (",
emmMsgType(msg->header.message_type));
switch (msg->header.message_type) {
case ATTACH_REQUEST:
esm_container = &msg->attach_request.esmmessagecontainer;
index += _attach_request(buffer + index, length - index,
&msg->attach_request);
break;
case ATTACH_ACCEPT:
esm_container = &msg->attach_accept.esmmessagecontainer;
index += _attach_accept(buffer + index, length - index,
&msg->attach_accept);
break;
case ATTACH_REJECT:
esm_container = &msg->attach_reject.esmmessagecontainer;
index += _attach_reject(buffer + index, length - index,
&msg->attach_reject);
break;
case ATTACH_COMPLETE:
esm_container = &msg->attach_complete.esmmessagecontainer;
index += _attach_complete(buffer + index, length - index,
&msg->attach_complete);
break;
case DETACH_REQUEST:
index += _detach_request(buffer + index, length - index,
&msg->detach_request);
break;
case DETACH_ACCEPT:
index += _detach_accept(buffer + index, length - index,
&msg->detach_accept);
break;
case IDENTITY_REQUEST:
index += _identity_request(buffer + index, length - index,
&msg->identity_request);
break;
case IDENTITY_RESPONSE:
index += _identity_response(buffer + index, length - index,
&msg->identity_response);
break;
case AUTHENTICATION_REQUEST:
index += _authentication_request(buffer + index, length - index,
&msg->authentication_request);
break;
case AUTHENTICATION_RESPONSE:
index += _authentication_response(buffer + index, length - index,
&msg->authentication_response);
break;
case AUTHENTICATION_FAILURE:
index += _authentication_failure(buffer + index, length - index,
&msg->authentication_failure);
break;
case AUTHENTICATION_REJECT:
index += _authentication_reject(buffer + index, length - index,
&msg->authentication_reject);
break;
case SECURITY_MODE_COMMAND:
index += _security_mode_command(buffer + index, length - index,
&msg->security_mode_command);
break;
case SECURITY_MODE_COMPLETE:
index += _security_mode_complete(buffer + index, length - index,
&msg->security_mode_complete);
break;
case SECURITY_MODE_REJECT:
index += _security_mode_reject(buffer + index, length - index,
&msg->security_mode_reject);
break;
case EMM_STATUS:
index += _emm_status(buffer + index, length - index,
&msg->emm_status);
break;
default:
printf("WARNING\t: %s - EMM NAS message is not valid (0x%x)\n",
__FUNCTION__, msg->header.message_type);
break;
}
index += snprintf(buffer + index, length - index, ")");
/* Process ESM message container */
if (esm_container) {
index += _esm_message_container(buffer + index,
length - index,
esm_container);
}
return (index);
}
/*
*-----------------------------------------------------------------------------
* Process Attach Request
*-----------------------------------------------------------------------------
*/
static int
_attach_request(
char* buffer,
int length,
const attach_request_msg* msg)
{
int index = 0;
/* EPS attach type */
index += snprintf(buffer + index, length - index, "Type = %s",
attachType(&msg->epsattachtype));
/* NAS key set identifier */
index += snprintf(buffer + index, length - index, ", KSI = ");
index += nasKeySetIdentifier(buffer + index, length - index,
&msg->naskeysetidentifier);
/* EPS mobile identity */
index += snprintf(buffer + index, length - index, ", ");
index += epsIdentity(buffer + index, length - index,
&msg->oldgutiorimsi);
return (index);
}
/*
*-----------------------------------------------------------------------------
* Process Attach Accept
*-----------------------------------------------------------------------------
*/
static int
_attach_accept(
char* buffer,
int length,
const attach_accept_msg* msg)
{
int index = 0;
/* T3412 timer value (TBD) */
/* TAI list (TBD) */
/* GUTI */
if (msg->presencemask & ATTACH_ACCEPT_GUTI_PRESENT) {
index += epsIdentity(buffer + index, length - index, &msg->guti);
}
return (index);
}
/*
*-----------------------------------------------------------------------------
* Process Attach Reject
*-----------------------------------------------------------------------------
*/
static int
_attach_reject(
char* buffer,
int length,
const attach_reject_msg* msg)
{
int index = 0;
/* EMM cause code */
index += snprintf(buffer + index, length - index, "EmmCause = %s (%d)",
emmCauseCode(msg->emmcause), msg->emmcause);
return (index);
}
/*
*-----------------------------------------------------------------------------
* Process Attach Complete
*-----------------------------------------------------------------------------
*/
static int
_attach_complete(
char* buffer,
int length,
const attach_complete_msg* msg)
{
int index = 0;
return (index);
}
/*
*-----------------------------------------------------------------------------
* Process Identity Request
*-----------------------------------------------------------------------------
*/
static int
_identity_request(
char* buffer,
int length,
const identity_request_msg* msg)
{
int index = 0;
/* Type of requested identity */
index += snprintf(buffer + index, length - index, "Type = %s",
identityType(&msg->identitytype));
return (index);
}
/*
*-----------------------------------------------------------------------------
* Process Detach Request
*-----------------------------------------------------------------------------
*/
static int
_detach_request(
char* buffer,
int length,
const detach_request_msg* msg)
{
int index = 0;
/* EPS attach type */
index += snprintf(buffer + index, length - index, "Type = %s",
detachType(&msg->detachtype));
/* NAS key set identifier */
index += snprintf(buffer + index, length - index, ", KSI = ");
index += nasKeySetIdentifier(buffer + index, length - index,
&msg->naskeysetidentifier);
/* EPS mobile identity */
index += snprintf(buffer + index, length - index, ", ");
index += epsIdentity(buffer + index, length - index,
&msg->gutiorimsi);
return (index);
}
/*
*-----------------------------------------------------------------------------
* Process Detach Accept
*-----------------------------------------------------------------------------
*/
static int
_detach_accept(
char* buffer,
int length,
const detach_accept_msg* msg)
{
int index = 0;
return (index);
}
/*
*-----------------------------------------------------------------------------
* Process Identity Response
*-----------------------------------------------------------------------------
*/
static int
_identity_response(
char* buffer,
int length,
const identity_response_msg* msg)
{
int index = 0;
/* Mobile identity */
index += mobileIdentity(buffer + index, length - index,
&msg->mobileidentity);
return (index);
}
/*
*-----------------------------------------------------------------------------
* Process Authentication Request
*-----------------------------------------------------------------------------
*/
static int
_authentication_request(
char* buffer,
int length,
const authentication_request_msg* msg)
{
int index = 0;
/* NAS key set identifier ASME */
index += snprintf(buffer + index, length - index, "KSIasme = ");
index += nasKeySetIdentifier(buffer + index, length - index,
&msg->naskeysetidentifierasme);
/* Authentication parameter RAND */
index += snprintf(buffer + index, length - index, "\\nRAND = ");
index += authenticationParameter(buffer + index, length - index,
&msg->authenticationparameterrand.rand);
/* Authentication parameter AUTN */
index += snprintf(buffer + index, length - index, ", AUTN = ");
index += authenticationParameter(buffer + index, length - index,
&msg->authenticationparameterautn.autn);
return (index);
}
/*
*-----------------------------------------------------------------------------
* Process Authentication Response
*-----------------------------------------------------------------------------
*/
static int
_authentication_response(
char* buffer,
int length,
const authentication_response_msg* msg)
{
int index = 0;
/* Authentication response parameter */
index += snprintf(buffer + index, length - index, "RES = ");
index += authenticationParameter(buffer + index, length - index,
&msg->authenticationresponseparameter.res);
return (index);
}
/*
*-----------------------------------------------------------------------------
* Process Authentication Failure
*-----------------------------------------------------------------------------
*/
static int
_authentication_failure(
char* buffer,
int length,
const authentication_failure_msg* msg)
{
int index = 0;
/* EMM cause */
index += snprintf(buffer + index, length - index, "EmmCause = %s (%d)",
emmCauseCode(msg->emmcause), msg->emmcause);
/* Authenticattion failure parameter */
if (msg->presencemask &
AUTHENTICATION_FAILURE_AUTHENTICATION_FAILURE_PARAMETER_PRESENT) {
index += snprintf(buffer + index, length - index, "AUTS = ");
index += authenticationParameter(buffer + index, length - index,
&msg->authenticationfailureparameter.auts);
}
return (index);
}
/*
*-----------------------------------------------------------------------------
* Process Authentication Reject
*-----------------------------------------------------------------------------
*/
static int
_authentication_reject(
char* buffer,
int length,
const authentication_reject_msg* msg)
{
int index = 0;
return (index);
}
/*
*-----------------------------------------------------------------------------
* Process Security Mode Command
*-----------------------------------------------------------------------------
*/
static int
_security_mode_command(
char* buffer,
int length,
const security_mode_command_msg* msg)
{
int index = 0;
/* Selected NAS ciphering algorithm */
index += snprintf(buffer + index, length - index, "%s (%d)",
nasCipheringAlgorithm(&msg->selectednassecurityalgorithms),
msg->selectednassecurityalgorithms.typeofcipheringalgorithm);
/* Selected NAS integrity algorithm */
index += snprintf(buffer + index, length - index, ", %s (%d)",
nasIntegrityAlgorithm(&msg->selectednassecurityalgorithms),
msg->selectednassecurityalgorithms.typeofintegrityalgorithm);
/* NAS key set identifier */
index += snprintf(buffer + index, length - index, ", KSI = ");
index += nasKeySetIdentifier(buffer + index, length - index,
&msg->naskeysetidentifier);
return (index);
}
/*
*-----------------------------------------------------------------------------
* Process Security Mode Complete
*-----------------------------------------------------------------------------
*/
static int
_security_mode_complete(
char* buffer,
int length,
const security_mode_complete_msg* msg)
{
int index = 0;
return (index);
}
/*
*-----------------------------------------------------------------------------
* Process Security Mode Reject
*-----------------------------------------------------------------------------
*/
static int
_security_mode_reject(
char* buffer,
int length,
const security_mode_reject_msg* msg)
{
int index = 0;
/* EMM cause code */
index += snprintf(buffer + index, length - index, "EmmCause = %s (%d)",
emmCauseCode(msg->emmcause), msg->emmcause);
return (index);
}
/*
*-----------------------------------------------------------------------------
* ESM message container
*-----------------------------------------------------------------------------
*/
static int
_esm_message_container(
char* buffer,
int length,
const EsmMessageContainer* msg)
{
int index = 0;
int bytes;
if (msg->esmmessagecontainercontents.length > 0) {
nas_message_t nas_msg;
memset(&nas_msg, 0, sizeof(nas_message_t));
/* Decode ESM message container */
bytes = nas_message_decode((char*)msg->esmmessagecontainercontents.value,
&nas_msg, msg->esmmessagecontainercontents.length);
if (bytes < 0) {
printf("ERROR\t: %s - Failed to decode ESM message container "
"(err=%d)\n", __FUNCTION__, bytes);
return (0);
}
index += snprintf(buffer + index, length - index, "\\n + ");
/* Process EPS Session Management NAS message */
index += _nas_process_esm(buffer + index, length - index,
&nas_msg.plain.esm);
}
return (index);
}
/*
*-----------------------------------------------------------------------------
* Process EMM Status
*-----------------------------------------------------------------------------
*/
static int
_emm_status(
char* buffer,
int length,
const emm_status_msg* msg)
{
int index = 0;
/* EMM cause code */
index += snprintf(buffer + index, length - index, "EmmCause = %s (%d)",
emmCauseCode(msg->emmcause), msg->emmcause);
return (index);
}
/*
* =============================================================================
* Functions used to process EPS Session Management messages
* =============================================================================
*/
/*
*-----------------------------------------------------------------------------
* Process EPS Session MAnagement NAS message
*-----------------------------------------------------------------------------
*/
static int
_nas_process_esm(
char* buffer,
int length,
const ESM_msg* msg)
{
int index = 0;
printf("INFO\t: Process %s\n", esmMsgType(msg->header.message_type));
index += snprintf(buffer + index, length - index, "%s (pti=%d, ebi=%d",
esmMsgType(msg->header.message_type),
msg->header.procedure_transaction_identity,
msg->header.eps_bearer_identity);
switch (msg->header.message_type) {
case PDN_CONNECTIVITY_REQUEST:
index += _pdn_connectivity_request(buffer + index, length - index,
&msg->pdn_connectivity_request);
break;
case PDN_CONNECTIVITY_REJECT:
index += _pdn_connectivity_reject(buffer + index, length - index,
&msg->pdn_connectivity_reject);
break;
case PDN_DISCONNECT_REQUEST:
index += _pdn_disconnect_request(buffer + index, length - index,
&msg->pdn_disconnect_request);
break;
case PDN_DISCONNECT_REJECT:
index += _pdn_disconnect_reject(buffer + index, length - index,
&msg->pdn_disconnect_reject);
break;
case ACTIVATE_DEFAULT_EPS_BEARER_CONTEXT_REQUEST:
index += _activate_default_eps_bearer_context_request(
buffer + index, length - index,
&msg->activate_default_eps_bearer_context_request);
break;
case ACTIVATE_DEFAULT_EPS_BEARER_CONTEXT_ACCEPT:
index += _activate_default_eps_bearer_context_accept(
buffer + index, length - index,
&msg->activate_default_eps_bearer_context_accept);
break;
case ACTIVATE_DEFAULT_EPS_BEARER_CONTEXT_REJECT:
index += _activate_default_eps_bearer_context_reject(
buffer + index, length - index,
&msg->activate_default_eps_bearer_context_reject);
break;
case ACTIVATE_DEDICATED_EPS_BEARER_CONTEXT_REQUEST:
index += _activate_dedicated_eps_bearer_context_request(
buffer + index, length - index,
&msg->activate_dedicated_eps_bearer_context_request);
break;
case ACTIVATE_DEDICATED_EPS_BEARER_CONTEXT_ACCEPT:
index += _activate_dedicated_eps_bearer_context_accept(
buffer + index, length - index,
&msg->activate_dedicated_eps_bearer_context_accept);
break;
case ACTIVATE_DEDICATED_EPS_BEARER_CONTEXT_REJECT:
index += _activate_dedicated_eps_bearer_context_reject(
buffer + index, length - index,
&msg->activate_dedicated_eps_bearer_context_reject);
break;
case DEACTIVATE_EPS_BEARER_CONTEXT_REQUEST:
index += _deactivate_eps_bearer_context_request(buffer + index,
length - index,
&msg->deactivate_eps_bearer_context_request);
break;
case DEACTIVATE_EPS_BEARER_CONTEXT_ACCEPT:
index += _deactivate_eps_bearer_context_accept(buffer + index,
length - index,
&msg->deactivate_eps_bearer_context_accept);
break;
case ESM_STATUS:
index += _esm_status(buffer + index, length - index,
&msg->esm_status);
break;
default:
printf("WARNING\t: %s - ESM NAS message is not valid (0x%x)\n",
__FUNCTION__, msg->header.message_type);
break;
}
index += snprintf(buffer + index, length - index, ")");
return (index);
}
/*
*-----------------------------------------------------------------------------
* Process PDN Connectivity Request
*-----------------------------------------------------------------------------
*/
static int
_pdn_connectivity_request(
char* buffer,
int length,
const pdn_connectivity_request_msg* msg)
{
int index = 0;
/* PDN request type and PDN type */
index += snprintf(buffer + index, length - index,
", RequestType = %s, PdnType = %s",
requestType(&msg->requesttype),
pdnType(&msg->pdntype));
/* Access Point Name */
if (msg->presencemask & PDN_CONNECTIVITY_REQUEST_ACCESS_POINT_NAME_PRESENT) {
index += snprintf(buffer + index, length - index, ", APN = %s",
(char*)msg->accesspointname.accesspointnamevalue.value);
}
return (index);
}
/*
*-----------------------------------------------------------------------------
* Process PDN Connectivity Reject
*-----------------------------------------------------------------------------
*/
static int
_pdn_connectivity_reject(
char* buffer,
int length,
const pdn_connectivity_reject_msg* msg)
{
int index = 0;
/* ESM cause code */
index += snprintf(buffer + index, length - index, ", EsmCause = %s (%d)",
esmCauseCode(msg->esmcause), msg->esmcause);
return (index);
}
/*
*-----------------------------------------------------------------------------
* Process PDN Disconnect Request
*-----------------------------------------------------------------------------
*/
static int
_pdn_disconnect_request(
char* buffer,
int length,
const pdn_disconnect_request_msg* msg)
{
int index = 0;
/* Linked EPS bearer identity */
index += snprintf(buffer + index, length - index, ", Linked EBI = %d",
msg->linkedepsbeareridentity);
return (index);
}
/*
*-----------------------------------------------------------------------------
* Process PDN Disconnect Reject
*-----------------------------------------------------------------------------
*/
static int
_pdn_disconnect_reject(
char* buffer,
int length,
const pdn_disconnect_reject_msg* msg)
{
int index = 0;
/* ESM cause code */
index += snprintf(buffer + index, length - index, ", EsmCause = %s (%d)",
esmCauseCode(msg->esmcause), msg->esmcause);
return (index);
}
/*
*-----------------------------------------------------------------------------
* Process Activate Default EPS Bearer Context Request
*-----------------------------------------------------------------------------
*/
static int
_activate_default_eps_bearer_context_request(
char* buffer,
int length,
const activate_default_eps_bearer_context_request_msg* msg)
{
int index = 0;
/* Access Point Name */
index += snprintf(buffer + index, length - index, ", APN = %s",
(char*)msg->accesspointname.accesspointnamevalue.value);
/* PDN address */
index += snprintf(buffer + index, length - index, ", PDN addr = ");
index += pdnAddress(buffer + index, length - index, &msg->pdnaddress);
return (index);
}
/*
*-----------------------------------------------------------------------------
* Process Activate Default EPS Bearer Context Accept
*-----------------------------------------------------------------------------
*/
static int
_activate_default_eps_bearer_context_accept(
char* buffer,
int length,
const activate_default_eps_bearer_context_accept_msg* msg)
{
int index = 0;
return (index);
}
/*
*-----------------------------------------------------------------------------
* Process Activate Default EPS Bearer Context Reject
*-----------------------------------------------------------------------------
*/
static int
_activate_default_eps_bearer_context_reject(
char* buffer,
int length,
const activate_default_eps_bearer_context_reject_msg* msg)
{
int index = 0;
/* ESM cause code */
index += snprintf(buffer + index, length - index, ", EsmCause = %s (%d)",
esmCauseCode(msg->esmcause), msg->esmcause);
return (index);
}
/*
*-----------------------------------------------------------------------------
* Process Activate Dedicated EPS Bearer Context Request
*-----------------------------------------------------------------------------
*/
static int
_activate_dedicated_eps_bearer_context_request(
char* buffer,
int length,
const activate_dedicated_eps_bearer_context_request_msg* msg)
{
int index = 0;
/* Linked EPS bearer identity */
index += snprintf(buffer + index, length - index, ", Linked EBI = %d",
msg->linkedepsbeareridentity);
return (index);
}
/*
*-----------------------------------------------------------------------------
* Process Activate Dedicated EPS Bearer Context Accept
*-----------------------------------------------------------------------------
*/
static int
_activate_dedicated_eps_bearer_context_accept(
char* buffer,
int length,
const activate_dedicated_eps_bearer_context_accept_msg* msg)
{
int index = 0;
return (index);
}
/*
*-----------------------------------------------------------------------------
* Process Activate Dedicated EPS Bearer Context Reject
*-----------------------------------------------------------------------------
*/
static int
_activate_dedicated_eps_bearer_context_reject(
char* buffer,
int length,
const activate_dedicated_eps_bearer_context_reject_msg* msg)
{
int index = 0;
/* ESM cause code */
index += snprintf(buffer + index, length - index, ", EsmCause = %s (%d)",
esmCauseCode(msg->esmcause), msg->esmcause);
return (index);
}
/*
*-----------------------------------------------------------------------------
* Process Deactivate EPS Bearer Context Request
*-----------------------------------------------------------------------------
*/
static int _deactivate_eps_bearer_context_request(
char* buffer,
int length,
const deactivate_eps_bearer_context_request_msg* msg)
{
int index = 0;
/* ESM cause code */
index += snprintf(buffer + index, length - index, ", EsmCause = %s (%d)",
esmCauseCode(msg->esmcause), msg->esmcause);
return (index);
}
/*
*-----------------------------------------------------------------------------
* Process Deactivate EPS Bearer Context Accept
*-----------------------------------------------------------------------------
*/
static int
_deactivate_eps_bearer_context_accept(
char* buffer,
int length,
const deactivate_eps_bearer_context_accept_msg* msg)
{
int index = 0;
return (index);
}
/*
*-----------------------------------------------------------------------------
* Process ESM Status
*-----------------------------------------------------------------------------
*/
static int
_esm_status(
char* buffer,
int length,
const esm_status_msg* msg)
{
int index = 0;
/* ESM cause code */
index += snprintf(buffer + index, length - index, ", EsmCause = %s (%d)",
esmCauseCode(msg->esmcause), msg->esmcause);
return (index);
}