Commit c943c756 authored by gauthier's avatar gauthier

UE context release, not finished.

It will seg fault the mme, but that was also the case before when UE retry connecting

git-svn-id: http://svn.eurecom.fr/openair4G/trunk@7300 818b1a75-f10b-46b9-bf7c-635c3b92a50f
parent c8d660ee
......@@ -43,3 +43,4 @@ MESSAGE_DEF(S1AP_UE_CONTEXT_RELEASE_LOG , MESSAGE_PRIORITY_MED, IttiMsgText
MESSAGE_DEF(S1AP_UE_CAPABILITIES_IND , MESSAGE_PRIORITY_MED, s1ap_ue_cap_ind_t , s1ap_ue_cap_ind)
MESSAGE_DEF(S1AP_ENB_DEREGISTERED_IND , MESSAGE_PRIORITY_MED, s1ap_eNB_deregistered_ind_t , s1ap_eNB_deregistered_ind)
MESSAGE_DEF(S1AP_DEREGISTER_UE_REQ , MESSAGE_PRIORITY_MED, s1ap_deregister_ue_req_t , s1ap_deregister_ue_req)
MESSAGE_DEF(S1AP_UE_CONTEXT_RELEASE_REQ , MESSAGE_PRIORITY_MED, s1ap_ue_context_release_req_t , s1ap_ue_context_release_req)
......@@ -29,8 +29,9 @@
#ifndef S1AP_MESSAGES_TYPES_H_
#define S1AP_MESSAGES_TYPES_H_
#define S1AP_ENB_DEREGISTERED_IND(mSGpTR) (mSGpTR)->ittiMsg.s1ap_eNB_deregistered_ind
#define S1AP_DEREGISTER_UE_REQ(mSGpTR) (mSGpTR)->ittiMsg.s1ap_deregister_ue_req
#define S1AP_ENB_DEREGISTERED_IND(mSGpTR) (mSGpTR)->ittiMsg.s1ap_eNB_deregistered_ind
#define S1AP_DEREGISTER_UE_REQ(mSGpTR) (mSGpTR)->ittiMsg.s1ap_deregister_ue_req
#define S1AP_UE_CONTEXT_RELEASE_REQ(mSGpTR) (mSGpTR)->ittiMsg.s1ap_ue_context_release_req
typedef struct s1ap_initial_ue_message_s {
unsigned eNB_ue_s1ap_id:24;
......@@ -80,4 +81,8 @@ typedef struct s1ap_deregister_ue_req_s {
uint32_t mme_ue_s1ap_id;
} s1ap_deregister_ue_req_t;
typedef struct s1ap_ue_context_release_req_s {
uint32_t mme_ue_s1ap_id;
} s1ap_ue_context_release_req_t;
#endif /* S1AP_MESSAGES_TYPES_H_ */
......@@ -32,3 +32,5 @@ MESSAGE_DEF(SGW_MODIFY_BEARER_REQUEST, MESSAGE_PRIORITY_MED, SgwModifyBearerRe
MESSAGE_DEF(SGW_MODIFY_BEARER_RESPONSE, MESSAGE_PRIORITY_MED, SgwModifyBearerResponse, sgwModifyBearerResponse)
MESSAGE_DEF(SGW_DELETE_SESSION_REQUEST, MESSAGE_PRIORITY_MED, SgwDeleteSessionRequest, sgwDeleteSessionRequest)
MESSAGE_DEF(SGW_DELETE_SESSION_RESPONSE, MESSAGE_PRIORITY_MED, SgwDeleteSessionResponse, sgwDeleteSessionResponse)
MESSAGE_DEF(SGW_RELEASE_ACCESS_BEARERS_REQUEST, MESSAGE_PRIORITY_MED, SgwReleaseAccessBearersRequest, sgwReleaseAccessBearersRequest)
MESSAGE_DEF(SGW_RELEASE_ACCESS_BEARERS_RESPONSE, MESSAGE_PRIORITY_MED, SgwReleaseAccessBearersResponse, sgwReleaseAccessBearersResponse)
......@@ -42,12 +42,14 @@
#ifndef SGW_LITE_MESSAGES_TYPES_H_
#define SGW_LITE_MESSAGES_TYPES_H_
#define SGW_CREATE_SESSION_REQUEST(mSGpTR) (mSGpTR)->ittiMsg.sgwCreateSessionRequest
#define SGW_CREATE_SESSION_RESPONSE(mSGpTR) (mSGpTR)->ittiMsg.sgwCreateSessionResponse
#define SGW_MODIFY_BEARER_REQUEST(mSGpTR) (mSGpTR)->ittiMsg.sgwModifyBearerRequest
#define SGW_MODIFY_BEARER_RESPONSE(mSGpTR) (mSGpTR)->ittiMsg.sgwModifyBearerResponse
#define SGW_DELETE_SESSION_REQUEST(mSGpTR) (mSGpTR)->ittiMsg.sgwDeleteSessionRequest
#define SGW_DELETE_SESSION_RESPONSE(mSGpTR) (mSGpTR)->ittiMsg.sgwDeleteSessionResponse
#define SGW_CREATE_SESSION_REQUEST(mSGpTR) (mSGpTR)->ittiMsg.sgwCreateSessionRequest
#define SGW_CREATE_SESSION_RESPONSE(mSGpTR) (mSGpTR)->ittiMsg.sgwCreateSessionResponse
#define SGW_MODIFY_BEARER_REQUEST(mSGpTR) (mSGpTR)->ittiMsg.sgwModifyBearerRequest
#define SGW_MODIFY_BEARER_RESPONSE(mSGpTR) (mSGpTR)->ittiMsg.sgwModifyBearerResponse
#define SGW_DELETE_SESSION_REQUEST(mSGpTR) (mSGpTR)->ittiMsg.sgwDeleteSessionRequest
#define SGW_DELETE_SESSION_RESPONSE(mSGpTR) (mSGpTR)->ittiMsg.sgwDeleteSessionResponse
#define SGW_RELEASE_ACCESS_BEARERS_REQUEST(mSGpTR) (mSGpTR)->ittiMsg.sgwReleaseAccessBearersRequest
#define SGW_RELEASE_ACCESS_BEARERS_RESPONSE(mSGpTR) (mSGpTR)->ittiMsg.sgwReleaseAccessBearersResponse
/** @struct SgwCreateSessionRequest
......@@ -867,4 +869,53 @@ typedef struct SgwDeleteSessionResponse_s {
uint32_t peer_ip;
} SgwDeleteSessionResponse;
/** @struct SgwReleaseAccessBearersRequest
* @brief Release AccessBearers Request
*
* The Release Access Bearers Request message shall sent on the S11 interface by
* the MME to the SGW as part of the S1 release procedure.
* The message shall also be sent on the S4 interface by the SGSN to the SGW as
* part of the procedures:
* - RAB release using S4
* - Iu Release using S4
* - READY to STANDBY transition within the network
*/
typedef struct SgwReleaseAccessBearersRequest_s {
Teid_t teid; ///< Tunnel Endpoint Identifier
uint32_t num_rabs;
EBI_t list_of_rabs[8] ; ///< Shall be present on S4 interface when this message is
///< used to release a subset of all active RABs according to
///< the RAB release procedure.
///< Several IEs with this type and instance values shall be
///< included as necessary to represent a list of RABs to be
///< released.
node_type_t originating_node; ///< This IE shall be sent on S11 interface, if ISR is active in the MME.
///< This IE shall be sent on S4 interface, if ISR is active in the SGSN
// Private Extension Private Extension ///< optional
} SgwReleaseAccessBearersRequest;
/** @struct SgwReleaseAccessBearersResponse
* @brief Release AccessBearers Response
*
* The Release Access Bearers Response message is sent on the S11 interface by the SGW to the MME as part of the S1
* release procedure.
* The message shall also be sent on the S4 interface by the SGW to the SGSN as part of the procedures:
* - RAB release using S4
* - Iu Release using S4
* - READY to STANDBY transition within the network
* Possible Cause values are specified in Table 8.4-1. Message specific cause values are:
* - "Request accepted".
* - "Request accepted partially".
* - "Context not found
*/
typedef struct SgwReleaseAccessBearersResponse_s {
Teid_t teid; ///< Tunnel Endpoint Identifier
SGWCause_t cause;
// Recovery ///< optional This IE shall be included if contacting the peer for the first time
// Private Extension ///< optional
} SgwReleaseAccessBearersResponse;
#endif
......@@ -51,6 +51,46 @@
#include "msc.h"
int
mme_app_send_s11_release_access_bearers_req(
struct ue_context_s * const ue_context_pP)
{
uint8_t i = 0;
task_id_t to_task = TASK_UNKNOWN;
/* Keep the identifier to the default APN */
context_identifier_t context_identifier;
MessageDef *message_p = NULL;
SgwReleaseAccessBearersRequest *release_access_bearers_request_p = NULL;
DevAssert(ue_context_pP != NULL);
#if !defined(ENABLE_STANDALONE_EPC)
to_task = TASK_S11;
#else
to_task = TASK_SPGW_APP;
#endif
message_p = itti_alloc_new_message(TASK_MME_APP, SGW_RELEASE_ACCESS_BEARERS_REQUEST);
release_access_bearers_request_p = &message_p->ittiMsg.sgwReleaseAccessBearersRequest;
memset(release_access_bearers_request_p, 0, sizeof(SgwReleaseAccessBearersRequest));
release_access_bearers_request_p->teid = ue_context_pP->sgw_s11_teid;
release_access_bearers_request_p->num_rabs = 1;
release_access_bearers_request_p->list_of_rabs[0] = ue_context_pP->default_bearer_id;
release_access_bearers_request_p->originating_node = NODE_TYPE_MME;
MSC_LOG_TX_MESSAGE(
MSC_MMEAPP_MME,
(to_task == TASK_S11) ? MSC_S11_MME:MSC_SP_GWAPP_MME,
NULL,0,
"0 SGW_RELEASE_ACCESS_BEARERS_REQUEST teid %u ebi %u",
SGW_RELEASE_ACCESS_BEARERS_REQUEST(message_p).teid,
release_access_bearers_request_p->list_of_rabs[0]);
itti_send_msg_to_task(to_task, INSTANCE_DEFAULT, message_p);
}
int
mme_app_send_s11_create_session_req(
......
......@@ -49,6 +49,7 @@
#include "mme_app_extern.h"
#include "mme_app_ue_context.h"
#include "mme_app_defs.h"
#include "msc.h"
int ue_context_compare_identifiers(struct ue_context_s *p1,
struct ue_context_s *p2);
......@@ -59,8 +60,10 @@ RB_PROTOTYPE(ue_context_map, ue_context_s, rb_entry,
RB_GENERATE(ue_context_map, ue_context_s, rb_entry,
ue_context_compare_identifiers);
//------------------------------------------------------------------------------
extern inline int ue_context_compare_identifiers(
struct ue_context_s *p1, struct ue_context_s *p2)
//------------------------------------------------------------------------------
{
MME_APP_DEBUG(" ue_context_compare_identifiers IMSI %"SCNu64"\n", p1->imsi);
MME_APP_DEBUG(" ue_context_compare_identifiers mme_s11_teid %08x\n" , p1->mme_s11_teid);
......@@ -144,7 +147,9 @@ extern inline int ue_context_compare_identifiers(
return 0;
}
//------------------------------------------------------------------------------
ue_context_t *mme_create_new_ue_context(void)
//------------------------------------------------------------------------------
{
ue_context_t *new_p;
......@@ -159,8 +164,10 @@ ue_context_t *mme_create_new_ue_context(void)
}
//------------------------------------------------------------------------------
struct ue_context_s *mme_ue_context_exists_imsi(mme_ue_context_t *mme_ue_context,
mme_app_imsi_t imsi)
//------------------------------------------------------------------------------
{
struct ue_context_s reference;
......@@ -173,8 +180,10 @@ struct ue_context_s *mme_ue_context_exists_imsi(mme_ue_context_t *mme_ue_context
}
//------------------------------------------------------------------------------
struct ue_context_s *mme_ue_context_exists_s11_teid(mme_ue_context_t *mme_ue_context,
uint32_t teid)
//------------------------------------------------------------------------------
{
struct ue_context_s reference;
......@@ -188,9 +197,11 @@ struct ue_context_s *mme_ue_context_exists_s11_teid(mme_ue_context_t *mme_ue_con
//------------------------------------------------------------------------------
ue_context_t *mme_ue_context_exists_mme_ue_s1ap_id(
mme_ue_context_t *mme_ue_context,
uint32_t mme_ue_s1ap_id)
//------------------------------------------------------------------------------
{
struct ue_context_s reference;
......@@ -204,9 +215,11 @@ ue_context_t *mme_ue_context_exists_mme_ue_s1ap_id(
//------------------------------------------------------------------------------
ue_context_t *mme_ue_context_exists_nas_ue_id(
mme_ue_context_t *mme_ue_context,
uint32_t nas_ue_id)
//------------------------------------------------------------------------------
{
struct ue_context_s reference;
......@@ -221,8 +234,10 @@ ue_context_t *mme_ue_context_exists_nas_ue_id(
//------------------------------------------------------------------------------
ue_context_t *mme_ue_context_exists_guti(mme_ue_context_t *mme_ue_context,
GUTI_t guti)
//------------------------------------------------------------------------------
{
struct ue_context_s reference;
......@@ -236,7 +251,9 @@ ue_context_t *mme_ue_context_exists_guti(mme_ue_context_t *mme_ue_context,
&reference);
}
//------------------------------------------------------------------------------
int mme_insert_ue_context(mme_ue_context_t *mme_ue_context, struct ue_context_s *ue_context_p)
//------------------------------------------------------------------------------
{
struct ue_context_s *collision_p = NULL;
......@@ -258,7 +275,9 @@ int mme_insert_ue_context(mme_ue_context_t *mme_ue_context, struct ue_context_s
return 0;
}
//------------------------------------------------------------------------------
void mme_app_dump_ue_contexts(mme_ue_context_t *mme_ue_context)
//------------------------------------------------------------------------------
{
struct ue_context_s *context_p;
......@@ -426,3 +445,27 @@ void mme_app_dump_ue_contexts(mme_ue_context_t *mme_ue_context)
}
MME_APP_DEBUG("---------------------------------------------------------\n");
}
//------------------------------------------------------------------------------
void mme_app_handle_s1ap_ue_context_release_req(const s1ap_ue_context_release_req_t const *s1ap_ue_context_release_req)
//------------------------------------------------------------------------------
{
struct ue_context_s *ue_context_p = NULL;
MME_APP_DEBUG("Received S1AP_UE_CONTEXT_RELEASE_REQ from S1AP\n");
ue_context_p = mme_ue_context_exists_nas_ue_id(&mme_app_desc.mme_ue_contexts, s1ap_ue_context_release_req->mme_ue_s1ap_id);
if (ue_context_p == NULL) {
MSC_LOG_EVENT(
MSC_MMEAPP_MME,
"S1AP_UE_CONTEXT_RELEASE_REQ Unknown ue %u",s1ap_ue_context_release_req->mme_ue_s1ap_id);
MME_APP_ERROR("UE context doesn't exist for UE 0x%08X/dec%u\n",
s1ap_ue_context_release_req->mme_ue_s1ap_id,
s1ap_ue_context_release_req->mme_ue_s1ap_id);
return;
}
mme_app_send_s11_release_access_bearers_req(ue_context_p);
}
......@@ -147,6 +147,11 @@ void *mme_app_thread(void *args)
}
break;
case S1AP_UE_CONTEXT_RELEASE_REQ: {
mme_app_handle_s1ap_ue_context_release_req(&received_message_p->ittiMsg.s1ap_ue_context_release_req);
}
break;
default: {
MME_APP_DEBUG("Unkwnon message ID %d:%s\n",
ITTI_MSG_ID(received_message_p), ITTI_MSG_NAME(received_message_p));
......
......@@ -42,6 +42,7 @@
#include <inttypes.h> /* For sscanf formats */
#include <time.h> /* to provide time_t */
#include "s1ap_messages_types.h"
#include "nas_messages_types.h"
#include "s6a_messages_types.h"
#include "security_types.h"
......@@ -248,6 +249,9 @@ ue_context_t *mme_create_new_ue_context(void);
**/
void mme_app_dump_ue_contexts(mme_ue_context_t *mme_ue_context);
void mme_app_handle_s1ap_ue_context_release_req(const s1ap_ue_context_release_req_t const *s1ap_ue_context_release_req);
#endif /* MME_APP_UE_CONTEXT_H_ */
/* @} */
......@@ -315,12 +315,11 @@ int nas_message_decrypt(
/* Check NAS message integrity */
if (mac != header->message_authentication_code) {
LOG_TRACE(DEBUG,
"MAC Failure MSG:%08X(%u) <> INT ALGO:%08X(%u)",
header->message_authentication_code,
header->message_authentication_code,
mac,
mac);
"MAC Failure MSG:%08X(%u) <> INT ALGO:%08X(%u) Type of security context %u",
header->message_authentication_code,header->message_authentication_code,
mac,mac, (emm_security_context!=NULL)?emm_security_context->type:88);
#if defined(NAS_MME)
LOG_FUNC_RETURN (TLV_DECODE_MAC_MISMATCH);
#else
......
......@@ -125,18 +125,18 @@ do {
# define LOG_FUNC_IN \
do { \
LOG_D(NAS, " %s:%d %*sEntering %s()\n", __FILE__, __LINE__, nas_log_func_indent, "", __FUNCTION__); \
nas_log_func_indent += 4; \
nas_log_func_indent += 2; \
} while (0)
# define LOG_FUNC_OUT \
do { \
nas_log_func_indent -= 4; \
nas_log_func_indent -= 2; \
LOG_D(NAS, " %s:%d %*sLeaving %s()\n", __FILE__, __LINE__, nas_log_func_indent, "", __FUNCTION__); \
} while (0)
# define LOG_FUNC_RETURN(rETURNcODE) \
do { \
nas_log_func_indent -= 4; \
nas_log_func_indent -= 2; \
LOG_D(NAS, " %s:%d %*sLeaving %s(rc = %ld)\n", __FILE__, __LINE__, nas_log_func_indent, "", \
__FUNCTION__, (long) rETURNcODE); \
return (rETURNcODE); \
......
......@@ -204,3 +204,20 @@ int s11_mme_handle_create_session_response(NwGtpv2cStackHandleT *stack_p,
return itti_send_msg_to_task(TASK_MME_APP, INSTANCE_DEFAULT, message_p);
}
int s11_mme_release_access_bearers_request(NwGtpv2cStackHandleT *stack_p,
SgwReleaseAccessBearersRequest *release_access_bearers_p)
{
NwGtpv2cUlpApiT ulp_req;
NwRcT rc;
uint8_t restart_counter = 0;
DevAssert(stack_p != NULL);
DevAssert(release_access_bearers_p != NULL);
memset(&ulp_req, 0, sizeof(NwGtpv2cUlpApiT));
AssertFatal(0 == 1, "TODO s11_mme_release_access_bearers_request()");
}
......@@ -35,6 +35,12 @@
int s11_mme_create_session_request(NwGtpv2cStackHandleT *stack_p,
SgwCreateSessionRequest *create_session_p);
/* @brief Create a new Release Access Bearers Request and send it to provided S-GW.
*/
int s11_mme_release_access_bearers_request(NwGtpv2cStackHandleT *stack_p,
SgwReleaseAccessBearersRequest *release_access_bearers_p);
/* @brief Handle a Create Session Response received from S-GW.
*/
int s11_mme_handle_create_session_response(NwGtpv2cStackHandleT *stack_p,
......
......@@ -189,6 +189,13 @@ static void *s11_mme_thread(void *args)
}
break;
case SGW_RELEASE_ACCESS_BEARERS_REQUEST: {
s11_mme_release_access_bearers_request(
&s11_mme_stack_handle,
&received_message_p->ittiMsg.sgwReleaseAccessBearersRequest);
}
break;
case UDP_DATA_IND: {
/* We received new data to handle from the UDP layer */
NwRcT rc;
......
......@@ -598,8 +598,9 @@ int s1ap_mme_handle_initial_context_setup_response(
int s1ap_mme_handle_ue_context_release_request(uint32_t assoc_id,
uint32_t stream, struct s1ap_message_s *message)
{
S1ap_UEContextReleaseRequestIEs_t *ueContextReleaseRequest_p;
ue_description_t *ue_ref = NULL;
S1ap_UEContextReleaseRequestIEs_t *ueContextReleaseRequest_p = NULL;
ue_description_t *ue_ref = NULL;
MessageDef *message_p = NULL;
ueContextReleaseRequest_p = &message->msg.s1ap_UEContextReleaseRequestIEs;
......@@ -638,8 +639,27 @@ int s1ap_mme_handle_ue_context_release_request(uint32_t assoc_id,
* -> Send a UE context Release Command to eNB.
* TODO
*/
s1ap_mme_generate_ue_context_release_command(ue_ref);
//s1ap_mme_generate_ue_context_release_command(ue_ref);
// UE context will be removed when receiving UE_CONTEXT_RELEASE_COMPLETE
message_p = itti_alloc_new_message(TASK_S1AP, S1AP_UE_CONTEXT_RELEASE_REQ);
AssertFatal(message_p != NULL,"itti_alloc_new_message Failed");
memset((void*)&message_p->ittiMsg.mme_app_initial_context_setup_rsp,
0,
sizeof(mme_app_initial_context_setup_rsp_t));
S1AP_UE_CONTEXT_RELEASE_REQ(message_p).mme_ue_s1ap_id = ue_ref->mme_ue_s1ap_id;
MSC_LOG_TX_MESSAGE(
MSC_S1AP_MME,
MSC_MMEAPP_MME,
NULL,0,
"0 S1AP_UE_CONTEXT_RELEASE_REQ mme_ue_s1ap_id %u ",
S1AP_UE_CONTEXT_RELEASE_REQ(message_p).mme_ue_s1ap_id);
return itti_send_msg_to_task(TASK_MME_APP, INSTANCE_DEFAULT, message_p);
} else {
// TODO
S1AP_DEBUG("UE_CONTEXT_RELEASE_REQUEST ignored, cause mismatch eNB_ue_s1ap_id: ctxt 0x%08x != request 0x%08x",
......
......@@ -46,6 +46,7 @@
#include "common_types.h"
#include "intertask_interface.h"
#include "mme_config.h"
#include "msc.h"
#include "sgw_lite_defs.h"
#include "sgw_lite_handlers.h"
......@@ -53,7 +54,6 @@
#include "sgw_lite.h"
#include "pgw_lite_paa.h"
#include "spgw_config.h"
#include "msc.h"
extern sgw_app_t sgw_app;
extern spgw_config_t spgw_config;
......@@ -1122,3 +1122,62 @@ sgw_lite_handle_delete_session_request(
return -1;
}
int
sgw_lite_handle_release_access_bearers_request(
const SgwReleaseAccessBearersRequest * const release_access_bearers_req_pP)
{
task_id_t to_task;
hashtable_rc_t hash_rc;
SgwReleaseAccessBearersResponse *release_access_bearers_resp_p = NULL;
MessageDef *message_p = NULL;
s_plus_p_gw_eps_bearer_context_information_t *ctx_p = NULL;
#if defined(ENABLE_STANDALONE_EPC)
to_task = TASK_MME_APP;
#else
to_task = TASK_S11;
#endif
message_p = itti_alloc_new_message(TASK_SPGW_APP, SGW_RELEASE_ACCESS_BEARERS_RESPONSE);
if (message_p == NULL) {
return -1;
}
release_access_bearers_resp_p = &message_p->ittiMsg.sgwReleaseAccessBearersResponse;
hash_rc = hashtable_get(sgw_app.s11_bearer_context_information_hashtable,
release_access_bearers_req_pP->teid,
(void**)&ctx_p);
if (hash_rc == HASH_TABLE_OK) {
release_access_bearers_resp_p->cause = REQUEST_ACCEPTED;
release_access_bearers_resp_p->teid = ctx_p->sgw_eps_bearer_context_information.mme_teid_for_S11;
#warning "TODO Here the release (sgw_lite_handle_release_access_bearers_request)"
MSC_LOG_TX_MESSAGE(
MSC_SP_GWAPP_MME,
(to_task == TASK_MME_APP) ? MSC_MMEAPP_MME:MSC_S11_MME,
NULL,0,
"0 SGW_RELEASE_ACCESS_BEARERS_RESPONSE teid %u cause %u",
release_access_bearers_resp_p->teid,
release_access_bearers_resp_p->cause);
return itti_send_msg_to_task(to_task, INSTANCE_DEFAULT, message_p);
} else {
release_access_bearers_resp_p->cause = CONTEXT_NOT_FOUND;
release_access_bearers_resp_p->teid = 0;
MSC_LOG_TX_MESSAGE(
MSC_SP_GWAPP_MME,
(to_task == TASK_MME_APP) ? MSC_MMEAPP_MME:MSC_S11_MME,
NULL,0,
"0 SGW_RELEASE_ACCESS_BEARERS_RESPONSE CONTEXT_NOT_FOUND");
return itti_send_msg_to_task(to_task, INSTANCE_DEFAULT, message_p);
}
return -1;
}
......@@ -43,5 +43,5 @@ int sgw_lite_handle_gtpv1uCreateTunnelResp(const Gtpv1uCreateTunnelResp * const
int sgw_lite_handle_gtpv1uUpdateTunnelResp(const Gtpv1uUpdateTunnelResp * const endpoint_updated_p);
int sgw_lite_handle_modify_bearer_request (const SgwModifyBearerRequest * const modify_bearer_p);
int sgw_lite_handle_delete_session_request(const SgwDeleteSessionRequest * const delete_session_p);
int sgw_lite_handle_release_access_bearers_request(const SgwReleaseAccessBearersRequest * const release_access_bearers_req_pP);
#endif /* SGW_LITE_HANDLERS_H_ */
......@@ -464,6 +464,12 @@ typedef struct {
/* TODO: add packet filter list as defined in 3GPP TS 29.274 Table 10.5.162 */
} tft_t;
typedef enum node_type_e {
NODE_TYPE_MME = 0,
NODE_TYPE_SGSN = 1
} node_type_t;
/* Cause as defined in 3GPP TS 29.274 #8.4 */
typedef enum SGWCause_e {
/* Request / Initial message */
......
......@@ -78,6 +78,11 @@ static void *sgw_lite_intertask_interface(void *args_p)
}
break;
case SGW_RELEASE_ACCESS_BEARERS_REQUEST: {
sgw_lite_handle_release_access_bearers_request(&received_message_p->ittiMsg.sgwReleaseAccessBearersRequest);
}
break;
case SGW_DELETE_SESSION_REQUEST: {
sgw_lite_handle_delete_session_request(&received_message_p->ittiMsg.sgwDeleteSessionRequest);
}
......
......@@ -694,6 +694,7 @@ int config_parse_opt_line(int argc, char *argv[], mme_config_t *mme_config_p)
break;
case 'm': {
fprintf(stdout, "Logging Message chart(mscgen)\n");
MSC_INIT(MSC_EPC);
}
break;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment