diff src/g23m-gprs/sm/sm_context_control.c @ 183:219afcfc6250

src/g23m-gprs: initial import from TCS3.2/LoCosto
author Mychaela Falconia <falcon@freecalypso.org>
date Thu, 13 Oct 2016 04:24:13 +0000
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/g23m-gprs/sm/sm_context_control.c	Thu Oct 13 04:24:13 2016 +0000
@@ -0,0 +1,1717 @@
+/*----------------------------------------------------------------------------
+|  Project :  3G PS
+|  Module  :  SM
++-----------------------------------------------------------------------------
+|             Copyright 2003 Texas Instruments.
+|             All rights reserved. 
+| 
+|             This file is confidential and a trade secret of Texas 
+|             Instruments .
+|             The receipt of or possession of this file does not convey 
+|             any rights to reproduce or disclose its contents or to 
+|             manufacture, use, or sell anything it may describe, in 
+|             whole, or in part, without the specific written consent of 
+|             Texas Instruments. 
++-----------------------------------------------------------------------------
+| Purpose:    Context Control state machine implementation in the SM entity.
+|             For design details, see:
+|             8010.908 SM Detailed Specification
++---------------------------------------------------------------------------*/
+
+/*==== DECLARATION CONTROL =================================================*/
+
+/*==== INCLUDES =============================================================*/
+
+#include "sm.h"
+
+#include "sm_context_control.h"
+#include "sm_network_control.h"
+#include "sm_user_plane_control.h"
+#include "sm_sequencer.h"
+
+#include "sm_aci_output_handler.h"
+
+/*==== CONSTS ===============================================================*/
+
+/*==== TYPES ================================================================*/
+
+typedef void (*T_SM_CONTEXT_CONTROL_TRANSITION_FUNC)(struct T_SM_CONTEXT_DATA *ptr_context_data, /*@null@*/ void *data);
+
+typedef struct {
+#ifdef DEBUG
+  T_SM_CONTEXT_CONTROL_EVENT            event;
+#endif /* DEBUG */
+  T_SM_CONTEXT_CONTROL_TRANSITION_FUNC  func;
+} T_SM_CONTEXT_CONTROL_TRANSITION;
+
+/*==== LOCALS ===============================================================*/
+
+static void state_event_error(struct T_SM_CONTEXT_DATA *context, /*@null@*/ void *data);
+static void go_to_S5         (struct T_SM_CONTEXT_DATA *context, /*@null@*/ void *data);
+static void go_to_S15        (struct T_SM_CONTEXT_DATA *context, /*@null@*/ void *data);
+
+static void handle_smreg_pdp_activate_req(struct T_SM_CONTEXT_DATA *context, /*@null@*/ void *data);
+static void handle_smreg_pdp_activate_sec_req(struct T_SM_CONTEXT_DATA *context, /*@null@*/ void *data);
+static void handle_smreg_pdp_activate_rej_res(struct T_SM_CONTEXT_DATA *context, /*@null@*/ void *data);
+static void handle_smreg_pdp_modify_req(struct T_SM_CONTEXT_DATA *context, /*@null@*/ void *data);
+
+static void handle_network_request_activation_in_S0(struct T_SM_CONTEXT_DATA *context, /*@null@*/ void *data);
+static void handle_network_request_activation_in_S1(struct T_SM_CONTEXT_DATA *context, /*@null@*/ void *data);
+static void handle_network_request_activation_override(struct T_SM_CONTEXT_DATA *context, /*@null@*/ void *data);
+static void handle_network_request_deactivate(struct T_SM_CONTEXT_DATA *context, /*@null@*/ void *data);
+
+static void handle_network_activate_completed_in_S2(struct T_SM_CONTEXT_DATA *context, /*@null@*/ void *data);
+static void handle_network_activate_completed_in_S6(struct T_SM_CONTEXT_DATA *context, /*@null@*/ void *data);
+static void handle_network_activate_completed_in_S12(struct T_SM_CONTEXT_DATA *context, /*@null@*/ void *data);
+static void handle_network_activate_rejected_in_S2(struct T_SM_CONTEXT_DATA *context, /*@null@*/ void *data);
+static void handle_network_activate_rejected_in_S6(struct T_SM_CONTEXT_DATA *context, /*@null@*/ void *data);
+static void handle_network_activate_rejected_in_S12(struct T_SM_CONTEXT_DATA *context, /*@null@*/ void *data);
+
+static void handle_network_modify_completed_in_S7(struct T_SM_CONTEXT_DATA *context, /*@null@*/ void *data);
+static void handle_network_modify_completed_in_S10(struct T_SM_CONTEXT_DATA *context, /*@null@*/ void *data);
+static void handle_network_modify_rejected_in_S7(struct T_SM_CONTEXT_DATA *context, /*@null@*/ void *data);
+static void handle_network_modify_rejected_in_S10(struct T_SM_CONTEXT_DATA *context, /*@null@*/ void *data);
+
+static void handle_network_request_modify(struct T_SM_CONTEXT_DATA *context, /*@null@*/ void *data);
+static void handle_network_request_modify_failed(struct T_SM_CONTEXT_DATA *context, /*@null@*/ void *data);
+
+static void handle_user_plane_activated_in_S3(struct T_SM_CONTEXT_DATA *context, /*@null@*/ void *data);
+static void handle_user_plane_activated_in_S13(struct T_SM_CONTEXT_DATA *context, /*@null@*/ void *data);
+static void handle_user_plane_error_in_S3(struct T_SM_CONTEXT_DATA *context, /*@null@*/ void *data);
+static void handle_user_plane_error_while_active(struct T_SM_CONTEXT_DATA *context, /*@null@*/ void *data);
+static void handle_user_plane_modified_in_S8(struct T_SM_CONTEXT_DATA *context, /*@null@*/ void *data);
+static void handle_user_plane_deactivated_in_S11(struct T_SM_CONTEXT_DATA *context, /*@null@*/ void *data);
+
+static void handle_deactivate_completed_in_S0(struct T_SM_CONTEXT_DATA *context, /*@null@*/ void *data);
+static void handle_deactivate_completed_in_S4(struct T_SM_CONTEXT_DATA *context, /*@null@*/ void *data);
+static void handle_deactivate_completed_in_S14(struct T_SM_CONTEXT_DATA *context, /*@null@*/ void *data);
+static void handle_deactivate_completed_in_S15(struct T_SM_CONTEXT_DATA *context, /*@null@*/ void *data);
+
+static void handle_context_upgrade(struct T_SM_CONTEXT_DATA *context, /*@null@*/ void *data);
+
+static void handle_context_deactivate(struct T_SM_CONTEXT_DATA *context, /*@null@*/ void *data);
+static void handle_context_deactivate_in_S0(struct T_SM_CONTEXT_DATA *context, /*@null@*/ void *data);
+static void handle_context_reactivate(struct T_SM_CONTEXT_DATA *context, /*@null@*/ void *data);
+static void handle_local_deactivate(struct T_SM_CONTEXT_DATA *context, /*@null@*/ void *data);
+
+static void forward_network_deactivate_completed(struct T_SM_CONTEXT_DATA *context, /*@null@*/ void *data);
+static void forward_user_plane_deactivated(struct T_SM_CONTEXT_DATA *context, /*@null@*/ void *data);
+
+/***********************************************************************
+ * State/Transition Table
+ */
+static const T_SM_CONTEXT_CONTROL_TRANSITION
+transition[SM_CONTEXT_CONTROL_NUMBER_OF_STATES][SM_CONTEXT_CONTROL_NUMBER_OF_EVENTS] =
+{
+  {  /* S0: SM_CONTEXT_DEACTIVATED */
+    M_TRANSITION(SM_P_SMREG_PDP_ACTIVATE_REQ,              handle_smreg_pdp_activate_req),
+    M_TRANSITION(SM_P_SMREG_PDP_ACTIVATE_REJ_RES,          state_event_error),
+    M_TRANSITION(SM_P_SMREG_PDP_ACTIVATE_SEC_REQ,          handle_smreg_pdp_activate_sec_req),
+    M_TRANSITION(SM_P_SMREG_PDP_MODIFY_REQ,                state_event_error),
+    M_TRANSITION(SM_I_CONTEXT_DEACTIVATE,                  handle_context_deactivate_in_S0),
+    M_TRANSITION(SM_I_CONTEXT_LOCAL_DEACTIVATE,            handle_context_deactivate_in_S0),
+    M_TRANSITION(SM_I_CONTEXT_REACTIVATE,                  handle_context_reactivate),
+    M_TRANSITION(SM_I_CONTEXT_UPGRADE,                     state_event_error),
+    M_TRANSITION(SM_I_CONTEXT_USER_PLANE_ERROR,            state_event_error),
+    M_TRANSITION(SM_I_NETWORK_ACTIVATE_COMPLETED,          state_event_error),
+    M_TRANSITION(SM_I_NETWORK_ACTIVATE_REJECTED,           state_event_error),
+    M_TRANSITION(SM_I_NETWORK_DEACTIVATE_COMPLETED,        state_event_error),
+    M_TRANSITION(SM_I_NETWORK_MODIFY_REJECTED,             state_event_error),
+    M_TRANSITION(SM_I_NETWORK_MODIFY_COMPLETED,            state_event_error),
+    M_TRANSITION(SM_I_NETWORK_REQUEST_ACTIVATION,          handle_network_request_activation_in_S0),
+    M_TRANSITION(SM_I_NETWORK_REQUEST_ACTIVATION_OVERRIDE, state_event_error),
+    M_TRANSITION(SM_I_NETWORK_REQUEST_DEACTIVATE,          state_event_error),
+    M_TRANSITION(SM_I_NETWORK_REQUEST_MODIFY,              state_event_error),
+    M_TRANSITION(SM_I_NETWORK_REQUEST_MODIFY_FAILED,       state_event_error),
+    M_TRANSITION(SM_I_USER_PLANE_ACTIVATED,                state_event_error),
+    M_TRANSITION(SM_I_USER_PLANE_DEACTIVATED,              forward_user_plane_deactivated),
+    M_TRANSITION(SM_I_USER_PLANE_MODIFIED,                 state_event_error),
+    M_TRANSITION(SM_I_DEACTIVATE_COMPLETED,                handle_deactivate_completed_in_S0)
+  },
+  {  /* S1: SM_CONTEXT_ACTIVATING_MT */
+    M_TRANSITION(SM_P_SMREG_PDP_ACTIVATE_REQ,              handle_smreg_pdp_activate_req),
+    M_TRANSITION(SM_P_SMREG_PDP_ACTIVATE_REJ_RES,          handle_smreg_pdp_activate_rej_res),
+    M_TRANSITION(SM_P_SMREG_PDP_ACTIVATE_SEC_REQ,          state_event_error),
+    M_TRANSITION(SM_P_SMREG_PDP_MODIFY_REQ,                state_event_error),
+    M_TRANSITION(SM_I_CONTEXT_DEACTIVATE,                  handle_context_deactivate),
+    M_TRANSITION(SM_I_CONTEXT_LOCAL_DEACTIVATE,            handle_local_deactivate),
+    M_TRANSITION(SM_I_CONTEXT_REACTIVATE,                  state_event_error),
+    M_TRANSITION(SM_I_CONTEXT_UPGRADE,                     state_event_error),
+    M_TRANSITION(SM_I_CONTEXT_USER_PLANE_ERROR,            state_event_error),
+    M_TRANSITION(SM_I_NETWORK_ACTIVATE_COMPLETED,          state_event_error),
+    M_TRANSITION(SM_I_NETWORK_ACTIVATE_REJECTED,           state_event_error),
+    M_TRANSITION(SM_I_NETWORK_DEACTIVATE_COMPLETED,        state_event_error),
+    M_TRANSITION(SM_I_NETWORK_MODIFY_REJECTED,             state_event_error),
+    M_TRANSITION(SM_I_NETWORK_MODIFY_COMPLETED,            state_event_error),
+    M_TRANSITION(SM_I_NETWORK_REQUEST_ACTIVATION,          handle_network_request_activation_in_S1),
+    M_TRANSITION(SM_I_NETWORK_REQUEST_ACTIVATION_OVERRIDE, state_event_error),
+    M_TRANSITION(SM_I_NETWORK_REQUEST_DEACTIVATE,          state_event_error),
+    M_TRANSITION(SM_I_NETWORK_REQUEST_MODIFY,              state_event_error),
+    M_TRANSITION(SM_I_NETWORK_REQUEST_MODIFY_FAILED,       state_event_error),
+    M_TRANSITION(SM_I_USER_PLANE_ACTIVATED,                state_event_error),
+    M_TRANSITION(SM_I_USER_PLANE_DEACTIVATED,              state_event_error),
+    M_TRANSITION(SM_I_USER_PLANE_MODIFIED,                 state_event_error),
+    M_TRANSITION(SM_I_DEACTIVATE_COMPLETED,                state_event_error)
+  },
+  {  /* S2: SM_CONTEXT_ACTIVATING_NETWORK */
+    M_TRANSITION(SM_P_SMREG_PDP_ACTIVATE_REQ,              state_event_error),
+    M_TRANSITION(SM_P_SMREG_PDP_ACTIVATE_REJ_RES,          state_event_error),
+    M_TRANSITION(SM_P_SMREG_PDP_ACTIVATE_SEC_REQ,          state_event_error),
+    M_TRANSITION(SM_P_SMREG_PDP_MODIFY_REQ,                state_event_error),
+    M_TRANSITION(SM_I_CONTEXT_DEACTIVATE,                  handle_context_deactivate),
+    M_TRANSITION(SM_I_CONTEXT_LOCAL_DEACTIVATE,            handle_local_deactivate),
+    M_TRANSITION(SM_I_CONTEXT_REACTIVATE,                  state_event_error),
+    M_TRANSITION(SM_I_CONTEXT_UPGRADE,                     state_event_error),
+    M_TRANSITION(SM_I_CONTEXT_USER_PLANE_ERROR,            state_event_error),
+    M_TRANSITION(SM_I_NETWORK_ACTIVATE_COMPLETED,          handle_network_activate_completed_in_S2),
+    M_TRANSITION(SM_I_NETWORK_ACTIVATE_REJECTED,           handle_network_activate_rejected_in_S2),
+    M_TRANSITION(SM_I_NETWORK_DEACTIVATE_COMPLETED,        state_event_error),
+    M_TRANSITION(SM_I_NETWORK_MODIFY_REJECTED,             state_event_error),
+    M_TRANSITION(SM_I_NETWORK_MODIFY_COMPLETED,            state_event_error),
+    M_TRANSITION(SM_I_NETWORK_REQUEST_ACTIVATION,          state_event_error),
+    M_TRANSITION(SM_I_NETWORK_REQUEST_ACTIVATION_OVERRIDE, state_event_error),
+    M_TRANSITION(SM_I_NETWORK_REQUEST_DEACTIVATE,          state_event_error),
+    M_TRANSITION(SM_I_NETWORK_REQUEST_MODIFY,              state_event_error),
+    M_TRANSITION(SM_I_NETWORK_REQUEST_MODIFY_FAILED,       state_event_error),
+    M_TRANSITION(SM_I_USER_PLANE_ACTIVATED,                state_event_error),
+    M_TRANSITION(SM_I_USER_PLANE_DEACTIVATED,              state_event_error),
+    M_TRANSITION(SM_I_USER_PLANE_MODIFIED,                 state_event_error),
+    M_TRANSITION(SM_I_DEACTIVATE_COMPLETED,                state_event_error)
+  },
+  {  /* S3: SM_CONTEXT_ACTIVATING_USER_PLANE */
+    M_TRANSITION(SM_P_SMREG_PDP_ACTIVATE_REQ,              state_event_error),
+    M_TRANSITION(SM_P_SMREG_PDP_ACTIVATE_REJ_RES,          state_event_error),
+    M_TRANSITION(SM_P_SMREG_PDP_ACTIVATE_SEC_REQ,          state_event_error),
+    M_TRANSITION(SM_P_SMREG_PDP_MODIFY_REQ,                state_event_error),
+    M_TRANSITION(SM_I_CONTEXT_DEACTIVATE,                  handle_context_deactivate),
+    M_TRANSITION(SM_I_CONTEXT_LOCAL_DEACTIVATE,            handle_local_deactivate),
+    M_TRANSITION(SM_I_CONTEXT_REACTIVATE,                  state_event_error),
+    M_TRANSITION(SM_I_CONTEXT_UPGRADE,                     state_event_error),
+    M_TRANSITION(SM_I_CONTEXT_USER_PLANE_ERROR,            handle_user_plane_error_in_S3),
+    M_TRANSITION(SM_I_NETWORK_ACTIVATE_COMPLETED,          state_event_error),
+    M_TRANSITION(SM_I_NETWORK_ACTIVATE_REJECTED,           state_event_error),
+    M_TRANSITION(SM_I_NETWORK_DEACTIVATE_COMPLETED,        state_event_error),
+    M_TRANSITION(SM_I_NETWORK_MODIFY_REJECTED,             state_event_error),
+    M_TRANSITION(SM_I_NETWORK_MODIFY_COMPLETED,            state_event_error),
+    M_TRANSITION(SM_I_NETWORK_REQUEST_ACTIVATION,          state_event_error),
+    M_TRANSITION(SM_I_NETWORK_REQUEST_ACTIVATION_OVERRIDE, state_event_error),
+    M_TRANSITION(SM_I_NETWORK_REQUEST_DEACTIVATE,          state_event_error),
+    M_TRANSITION(SM_I_NETWORK_REQUEST_MODIFY,              state_event_error),
+    M_TRANSITION(SM_I_NETWORK_REQUEST_MODIFY_FAILED,       state_event_error),
+    M_TRANSITION(SM_I_USER_PLANE_ACTIVATED,                handle_user_plane_activated_in_S3),
+    M_TRANSITION(SM_I_USER_PLANE_DEACTIVATED,              state_event_error),
+    M_TRANSITION(SM_I_USER_PLANE_MODIFIED,                 state_event_error),
+    M_TRANSITION(SM_I_DEACTIVATE_COMPLETED,                state_event_error)
+  },
+  {  /* S4: SM_CONTEXT_ACTIVATE_FAILED_DEACTIVATING */
+    M_TRANSITION(SM_P_SMREG_PDP_ACTIVATE_REQ,              state_event_error),
+    M_TRANSITION(SM_P_SMREG_PDP_ACTIVATE_REJ_RES,          state_event_error),
+    M_TRANSITION(SM_P_SMREG_PDP_ACTIVATE_SEC_REQ,          state_event_error),
+    M_TRANSITION(SM_P_SMREG_PDP_MODIFY_REQ,                state_event_error),
+    M_TRANSITION(SM_I_CONTEXT_DEACTIVATE,                  handle_context_deactivate),
+    M_TRANSITION(SM_I_CONTEXT_LOCAL_DEACTIVATE,            handle_local_deactivate),
+    M_TRANSITION(SM_I_CONTEXT_REACTIVATE,                  state_event_error),
+    M_TRANSITION(SM_I_CONTEXT_UPGRADE,                     state_event_error),
+    M_TRANSITION(SM_I_CONTEXT_USER_PLANE_ERROR,            state_event_error),
+    M_TRANSITION(SM_I_NETWORK_ACTIVATE_COMPLETED,          state_event_error),
+    M_TRANSITION(SM_I_NETWORK_ACTIVATE_REJECTED,           state_event_error),
+    M_TRANSITION(SM_I_NETWORK_DEACTIVATE_COMPLETED,        forward_network_deactivate_completed),
+    M_TRANSITION(SM_I_NETWORK_MODIFY_REJECTED,             state_event_error),
+    M_TRANSITION(SM_I_NETWORK_MODIFY_COMPLETED,            state_event_error),
+    M_TRANSITION(SM_I_NETWORK_REQUEST_ACTIVATION,          state_event_error),
+    M_TRANSITION(SM_I_NETWORK_REQUEST_ACTIVATION_OVERRIDE, state_event_error),
+    M_TRANSITION(SM_I_NETWORK_REQUEST_DEACTIVATE,          state_event_error),
+    M_TRANSITION(SM_I_NETWORK_REQUEST_MODIFY,              state_event_error),
+    M_TRANSITION(SM_I_NETWORK_REQUEST_MODIFY_FAILED,       state_event_error),
+    M_TRANSITION(SM_I_USER_PLANE_ACTIVATED,                state_event_error),
+    M_TRANSITION(SM_I_USER_PLANE_DEACTIVATED,              forward_user_plane_deactivated),
+    M_TRANSITION(SM_I_USER_PLANE_MODIFIED,                 state_event_error),
+    M_TRANSITION(SM_I_DEACTIVATE_COMPLETED,                handle_deactivate_completed_in_S4)
+  },
+  {  /* S5: SM_CONTEXT_ACTIVATED */
+    M_TRANSITION(SM_P_SMREG_PDP_ACTIVATE_REQ,              state_event_error),
+    M_TRANSITION(SM_P_SMREG_PDP_ACTIVATE_REJ_RES,          state_event_error),
+    M_TRANSITION(SM_P_SMREG_PDP_ACTIVATE_SEC_REQ,          state_event_error),
+    M_TRANSITION(SM_P_SMREG_PDP_MODIFY_REQ,                handle_smreg_pdp_modify_req),
+    M_TRANSITION(SM_I_CONTEXT_DEACTIVATE,                  handle_context_deactivate),
+    M_TRANSITION(SM_I_CONTEXT_LOCAL_DEACTIVATE,            handle_local_deactivate),
+    M_TRANSITION(SM_I_CONTEXT_REACTIVATE,                  state_event_error),
+    M_TRANSITION(SM_I_CONTEXT_UPGRADE,                     handle_context_upgrade),
+    M_TRANSITION(SM_I_CONTEXT_USER_PLANE_ERROR,            handle_user_plane_error_while_active),
+    M_TRANSITION(SM_I_NETWORK_ACTIVATE_COMPLETED,          state_event_error),
+    M_TRANSITION(SM_I_NETWORK_ACTIVATE_REJECTED,           state_event_error),
+    M_TRANSITION(SM_I_NETWORK_DEACTIVATE_COMPLETED,        state_event_error),
+    M_TRANSITION(SM_I_NETWORK_MODIFY_REJECTED,             state_event_error),
+    M_TRANSITION(SM_I_NETWORK_MODIFY_COMPLETED,            state_event_error),
+    M_TRANSITION(SM_I_NETWORK_REQUEST_ACTIVATION,          state_event_error),
+    M_TRANSITION(SM_I_NETWORK_REQUEST_ACTIVATION_OVERRIDE, handle_network_request_activation_override),
+    M_TRANSITION(SM_I_NETWORK_REQUEST_DEACTIVATE,          handle_network_request_deactivate),
+    M_TRANSITION(SM_I_NETWORK_REQUEST_MODIFY,              handle_network_request_modify),
+    M_TRANSITION(SM_I_NETWORK_REQUEST_MODIFY_FAILED,       handle_network_request_modify_failed),
+    M_TRANSITION(SM_I_USER_PLANE_ACTIVATED,                state_event_error),
+    M_TRANSITION(SM_I_USER_PLANE_DEACTIVATED,              state_event_error),
+    M_TRANSITION(SM_I_USER_PLANE_MODIFIED,                 state_event_error),
+    M_TRANSITION(SM_I_DEACTIVATE_COMPLETED,                state_event_error)
+  },
+  {  /* S6: SM_CONTEXT_ACTIVATION_OVERRIDE */
+    M_TRANSITION(SM_P_SMREG_PDP_ACTIVATE_REQ,              state_event_error),
+    M_TRANSITION(SM_P_SMREG_PDP_ACTIVATE_REJ_RES,          state_event_error),
+    M_TRANSITION(SM_P_SMREG_PDP_ACTIVATE_SEC_REQ,          state_event_error),
+    M_TRANSITION(SM_P_SMREG_PDP_MODIFY_REQ,                state_event_error),
+    M_TRANSITION(SM_I_CONTEXT_DEACTIVATE,                  handle_context_deactivate),
+    M_TRANSITION(SM_I_CONTEXT_LOCAL_DEACTIVATE,            handle_local_deactivate),
+    M_TRANSITION(SM_I_CONTEXT_REACTIVATE,                  state_event_error),
+    M_TRANSITION(SM_I_CONTEXT_UPGRADE,                     state_event_error),
+    M_TRANSITION(SM_I_CONTEXT_USER_PLANE_ERROR,            handle_user_plane_error_while_active),
+    M_TRANSITION(SM_I_NETWORK_ACTIVATE_COMPLETED,          handle_network_activate_completed_in_S6),
+    M_TRANSITION(SM_I_NETWORK_ACTIVATE_REJECTED,           handle_network_activate_rejected_in_S6),
+    M_TRANSITION(SM_I_NETWORK_DEACTIVATE_COMPLETED,        state_event_error),
+    M_TRANSITION(SM_I_NETWORK_MODIFY_REJECTED,             state_event_error),
+    M_TRANSITION(SM_I_NETWORK_MODIFY_COMPLETED,            state_event_error),
+    M_TRANSITION(SM_I_NETWORK_REQUEST_ACTIVATION,          state_event_error),
+    M_TRANSITION(SM_I_NETWORK_REQUEST_ACTIVATION_OVERRIDE, handle_network_request_activation_override),
+    M_TRANSITION(SM_I_NETWORK_REQUEST_DEACTIVATE,          state_event_error),
+    M_TRANSITION(SM_I_NETWORK_REQUEST_MODIFY,              state_event_error),
+    M_TRANSITION(SM_I_NETWORK_REQUEST_MODIFY_FAILED,       state_event_error),
+    M_TRANSITION(SM_I_USER_PLANE_ACTIVATED,                state_event_error),
+    M_TRANSITION(SM_I_USER_PLANE_DEACTIVATED,              state_event_error),
+    M_TRANSITION(SM_I_USER_PLANE_MODIFIED,                 state_event_error),
+    M_TRANSITION(SM_I_DEACTIVATE_COMPLETED,                state_event_error)
+  },
+  {  /* S7: SM_CONTEXT_MODIFYING_IN_NETWORK */
+    M_TRANSITION(SM_P_SMREG_PDP_ACTIVATE_REQ,              state_event_error),
+    M_TRANSITION(SM_P_SMREG_PDP_ACTIVATE_REJ_RES,          state_event_error),
+    M_TRANSITION(SM_P_SMREG_PDP_ACTIVATE_SEC_REQ,          state_event_error),
+    M_TRANSITION(SM_P_SMREG_PDP_MODIFY_REQ,                state_event_error),
+    M_TRANSITION(SM_I_CONTEXT_DEACTIVATE,                  handle_context_deactivate),
+    M_TRANSITION(SM_I_CONTEXT_LOCAL_DEACTIVATE,            handle_local_deactivate),
+    M_TRANSITION(SM_I_CONTEXT_REACTIVATE,                  state_event_error),
+    M_TRANSITION(SM_I_CONTEXT_UPGRADE,                     state_event_error),
+    M_TRANSITION(SM_I_CONTEXT_USER_PLANE_ERROR,            handle_user_plane_error_while_active),
+    M_TRANSITION(SM_I_NETWORK_ACTIVATE_COMPLETED,          state_event_error),
+    M_TRANSITION(SM_I_NETWORK_ACTIVATE_REJECTED,           state_event_error),
+    M_TRANSITION(SM_I_NETWORK_DEACTIVATE_COMPLETED,        state_event_error),
+    M_TRANSITION(SM_I_NETWORK_MODIFY_REJECTED,             handle_network_modify_rejected_in_S7),
+    M_TRANSITION(SM_I_NETWORK_MODIFY_COMPLETED,            handle_network_modify_completed_in_S7),
+    M_TRANSITION(SM_I_NETWORK_REQUEST_ACTIVATION,          state_event_error),
+    M_TRANSITION(SM_I_NETWORK_REQUEST_ACTIVATION_OVERRIDE, state_event_error),
+    M_TRANSITION(SM_I_NETWORK_REQUEST_DEACTIVATE,          state_event_error),
+    M_TRANSITION(SM_I_NETWORK_REQUEST_MODIFY,              state_event_error),
+    M_TRANSITION(SM_I_NETWORK_REQUEST_MODIFY_FAILED,       handle_network_request_modify_failed),
+    M_TRANSITION(SM_I_USER_PLANE_ACTIVATED,                state_event_error),
+    M_TRANSITION(SM_I_USER_PLANE_DEACTIVATED,              state_event_error),
+    M_TRANSITION(SM_I_USER_PLANE_MODIFIED,                 state_event_error),
+    M_TRANSITION(SM_I_DEACTIVATE_COMPLETED,                state_event_error)
+  },
+  {  /* S8: SM_CONTEXT_MODIFYING_USER_PLANE */
+    M_TRANSITION(SM_P_SMREG_PDP_ACTIVATE_REQ,              state_event_error),
+    M_TRANSITION(SM_P_SMREG_PDP_ACTIVATE_REJ_RES,          state_event_error),
+    M_TRANSITION(SM_P_SMREG_PDP_ACTIVATE_SEC_REQ,          state_event_error),
+    M_TRANSITION(SM_P_SMREG_PDP_MODIFY_REQ,                state_event_error),
+    M_TRANSITION(SM_I_CONTEXT_DEACTIVATE,                  handle_context_deactivate),
+    M_TRANSITION(SM_I_CONTEXT_LOCAL_DEACTIVATE,            handle_local_deactivate),
+    M_TRANSITION(SM_I_CONTEXT_REACTIVATE,                  state_event_error),
+    M_TRANSITION(SM_I_CONTEXT_UPGRADE,                     state_event_error),
+    M_TRANSITION(SM_I_CONTEXT_USER_PLANE_ERROR,            handle_user_plane_error_while_active),
+    M_TRANSITION(SM_I_NETWORK_ACTIVATE_COMPLETED,          state_event_error),
+    M_TRANSITION(SM_I_NETWORK_ACTIVATE_REJECTED,           state_event_error),
+    M_TRANSITION(SM_I_NETWORK_DEACTIVATE_COMPLETED,        state_event_error),
+    M_TRANSITION(SM_I_NETWORK_MODIFY_REJECTED,             state_event_error),
+    M_TRANSITION(SM_I_NETWORK_MODIFY_COMPLETED,            state_event_error),
+    M_TRANSITION(SM_I_NETWORK_REQUEST_ACTIVATION,          state_event_error),
+    M_TRANSITION(SM_I_NETWORK_REQUEST_ACTIVATION_OVERRIDE, state_event_error),
+    M_TRANSITION(SM_I_NETWORK_REQUEST_DEACTIVATE,          state_event_error),
+    M_TRANSITION(SM_I_NETWORK_REQUEST_MODIFY,              state_event_error),
+    M_TRANSITION(SM_I_NETWORK_REQUEST_MODIFY_FAILED,       state_event_error),
+    M_TRANSITION(SM_I_USER_PLANE_ACTIVATED,                state_event_error),
+    M_TRANSITION(SM_I_USER_PLANE_DEACTIVATED,              state_event_error),
+    M_TRANSITION(SM_I_USER_PLANE_MODIFIED,                 handle_user_plane_modified_in_S8),
+    M_TRANSITION(SM_I_DEACTIVATE_COMPLETED,                state_event_error)
+  },
+  {  /* S9: SM_CONTEXT_MODIFYING_USER_PLANE_MT */
+    M_TRANSITION(SM_P_SMREG_PDP_ACTIVATE_REQ,              state_event_error),
+    M_TRANSITION(SM_P_SMREG_PDP_ACTIVATE_REJ_RES,          state_event_error),
+    M_TRANSITION(SM_P_SMREG_PDP_ACTIVATE_SEC_REQ,          state_event_error),
+    M_TRANSITION(SM_P_SMREG_PDP_MODIFY_REQ,                state_event_error),
+    M_TRANSITION(SM_I_CONTEXT_DEACTIVATE,                  handle_context_deactivate),
+    M_TRANSITION(SM_I_CONTEXT_LOCAL_DEACTIVATE,            handle_local_deactivate),
+    M_TRANSITION(SM_I_CONTEXT_REACTIVATE,                  state_event_error),
+    M_TRANSITION(SM_I_CONTEXT_UPGRADE,                     state_event_error),
+    M_TRANSITION(SM_I_CONTEXT_USER_PLANE_ERROR,            handle_user_plane_error_while_active),
+    M_TRANSITION(SM_I_NETWORK_ACTIVATE_COMPLETED,          state_event_error),
+    M_TRANSITION(SM_I_NETWORK_ACTIVATE_REJECTED,           state_event_error),
+    M_TRANSITION(SM_I_NETWORK_DEACTIVATE_COMPLETED,        state_event_error),
+    M_TRANSITION(SM_I_NETWORK_MODIFY_REJECTED,             state_event_error),
+    M_TRANSITION(SM_I_NETWORK_MODIFY_COMPLETED,            state_event_error),
+    M_TRANSITION(SM_I_NETWORK_REQUEST_ACTIVATION,          state_event_error),
+    M_TRANSITION(SM_I_NETWORK_REQUEST_ACTIVATION_OVERRIDE, state_event_error),
+    M_TRANSITION(SM_I_NETWORK_REQUEST_DEACTIVATE,          state_event_error),
+    M_TRANSITION(SM_I_NETWORK_REQUEST_MODIFY,              state_event_error),
+    M_TRANSITION(SM_I_NETWORK_REQUEST_MODIFY_FAILED,       state_event_error),
+    M_TRANSITION(SM_I_USER_PLANE_ACTIVATED,                state_event_error),
+    M_TRANSITION(SM_I_USER_PLANE_DEACTIVATED,              state_event_error),
+    M_TRANSITION(SM_I_USER_PLANE_MODIFIED,                 go_to_S5),
+    M_TRANSITION(SM_I_DEACTIVATE_COMPLETED,                state_event_error)
+  },
+  {  /* S10: SM_CONTEXT_UPGRADING_IN_NETWORK */
+    M_TRANSITION(SM_P_SMREG_PDP_ACTIVATE_REQ,              state_event_error),
+    M_TRANSITION(SM_P_SMREG_PDP_ACTIVATE_REJ_RES,          state_event_error),
+    M_TRANSITION(SM_P_SMREG_PDP_ACTIVATE_SEC_REQ,          state_event_error),
+    M_TRANSITION(SM_P_SMREG_PDP_MODIFY_REQ,                state_event_error),
+    M_TRANSITION(SM_I_CONTEXT_DEACTIVATE,                  handle_context_deactivate),
+    M_TRANSITION(SM_I_CONTEXT_LOCAL_DEACTIVATE,            handle_local_deactivate),
+    M_TRANSITION(SM_I_CONTEXT_REACTIVATE,                  state_event_error),
+    M_TRANSITION(SM_I_CONTEXT_UPGRADE,                     state_event_error),
+    M_TRANSITION(SM_I_CONTEXT_USER_PLANE_ERROR,            handle_user_plane_error_while_active),
+    M_TRANSITION(SM_I_NETWORK_ACTIVATE_COMPLETED,          state_event_error),
+    M_TRANSITION(SM_I_NETWORK_ACTIVATE_REJECTED,           state_event_error),
+    M_TRANSITION(SM_I_NETWORK_DEACTIVATE_COMPLETED,        state_event_error),
+    M_TRANSITION(SM_I_NETWORK_MODIFY_REJECTED,             handle_network_modify_rejected_in_S10),
+    M_TRANSITION(SM_I_NETWORK_MODIFY_COMPLETED,            handle_network_modify_completed_in_S10),
+    M_TRANSITION(SM_I_NETWORK_REQUEST_ACTIVATION,          state_event_error),
+    M_TRANSITION(SM_I_NETWORK_REQUEST_ACTIVATION_OVERRIDE, state_event_error),
+    M_TRANSITION(SM_I_NETWORK_REQUEST_DEACTIVATE,          state_event_error),
+    M_TRANSITION(SM_I_NETWORK_REQUEST_MODIFY,              state_event_error),
+    M_TRANSITION(SM_I_NETWORK_REQUEST_MODIFY_FAILED,       state_event_error),
+    M_TRANSITION(SM_I_USER_PLANE_ACTIVATED,                state_event_error),
+    M_TRANSITION(SM_I_USER_PLANE_DEACTIVATED,              state_event_error),
+    M_TRANSITION(SM_I_USER_PLANE_MODIFIED,                 state_event_error),
+    M_TRANSITION(SM_I_DEACTIVATE_COMPLETED,                state_event_error)
+  },
+  {  /* S11: SM_CONTEXT_REACTIVATING_DEACTIVATING_USER_PLANE */
+    M_TRANSITION(SM_P_SMREG_PDP_ACTIVATE_REQ,              state_event_error),
+    M_TRANSITION(SM_P_SMREG_PDP_ACTIVATE_REJ_RES,          state_event_error),
+    M_TRANSITION(SM_P_SMREG_PDP_ACTIVATE_SEC_REQ,          state_event_error),
+    M_TRANSITION(SM_P_SMREG_PDP_MODIFY_REQ,                state_event_error),
+    M_TRANSITION(SM_I_CONTEXT_DEACTIVATE,                  handle_context_deactivate),
+    M_TRANSITION(SM_I_CONTEXT_LOCAL_DEACTIVATE,            handle_local_deactivate),
+    M_TRANSITION(SM_I_CONTEXT_REACTIVATE,                  state_event_error),
+    M_TRANSITION(SM_I_CONTEXT_UPGRADE,                     state_event_error),
+    M_TRANSITION(SM_I_CONTEXT_USER_PLANE_ERROR,            handle_user_plane_error_while_active),
+    M_TRANSITION(SM_I_NETWORK_ACTIVATE_COMPLETED,          state_event_error),
+    M_TRANSITION(SM_I_NETWORK_ACTIVATE_REJECTED,           state_event_error),
+    M_TRANSITION(SM_I_NETWORK_DEACTIVATE_COMPLETED,        state_event_error),
+    M_TRANSITION(SM_I_NETWORK_MODIFY_REJECTED,             state_event_error),
+    M_TRANSITION(SM_I_NETWORK_MODIFY_COMPLETED,            state_event_error),
+    M_TRANSITION(SM_I_NETWORK_REQUEST_ACTIVATION,          state_event_error),
+    M_TRANSITION(SM_I_NETWORK_REQUEST_ACTIVATION_OVERRIDE, state_event_error),
+    M_TRANSITION(SM_I_NETWORK_REQUEST_DEACTIVATE,          state_event_error),
+    M_TRANSITION(SM_I_NETWORK_REQUEST_MODIFY,              state_event_error),
+    M_TRANSITION(SM_I_NETWORK_REQUEST_MODIFY_FAILED,       state_event_error),
+    M_TRANSITION(SM_I_USER_PLANE_ACTIVATED,                state_event_error),
+    M_TRANSITION(SM_I_USER_PLANE_DEACTIVATED,              forward_user_plane_deactivated),
+    M_TRANSITION(SM_I_USER_PLANE_MODIFIED,                 state_event_error),
+    M_TRANSITION(SM_I_DEACTIVATE_COMPLETED,                handle_user_plane_deactivated_in_S11)
+  },
+  {  /* S12: SM_CONTEXT_REACTIVATING_IN_NETWORK */
+    M_TRANSITION(SM_P_SMREG_PDP_ACTIVATE_REQ,              state_event_error),
+    M_TRANSITION(SM_P_SMREG_PDP_ACTIVATE_REJ_RES,          state_event_error),
+    M_TRANSITION(SM_P_SMREG_PDP_ACTIVATE_SEC_REQ,          state_event_error),
+    M_TRANSITION(SM_P_SMREG_PDP_MODIFY_REQ,                state_event_error),
+    M_TRANSITION(SM_I_CONTEXT_DEACTIVATE,                  handle_context_deactivate),
+    M_TRANSITION(SM_I_CONTEXT_LOCAL_DEACTIVATE,            handle_local_deactivate),
+    M_TRANSITION(SM_I_CONTEXT_REACTIVATE,                  state_event_error),
+    M_TRANSITION(SM_I_CONTEXT_UPGRADE,                     state_event_error),
+    M_TRANSITION(SM_I_CONTEXT_USER_PLANE_ERROR,            state_event_error),
+    M_TRANSITION(SM_I_NETWORK_ACTIVATE_COMPLETED,          handle_network_activate_completed_in_S12),
+    M_TRANSITION(SM_I_NETWORK_ACTIVATE_REJECTED,           handle_network_activate_rejected_in_S12),
+    M_TRANSITION(SM_I_NETWORK_DEACTIVATE_COMPLETED,        state_event_error),
+    M_TRANSITION(SM_I_NETWORK_MODIFY_REJECTED,             state_event_error),
+    M_TRANSITION(SM_I_NETWORK_MODIFY_COMPLETED,            state_event_error),
+    M_TRANSITION(SM_I_NETWORK_REQUEST_ACTIVATION,          state_event_error),
+    M_TRANSITION(SM_I_NETWORK_REQUEST_ACTIVATION_OVERRIDE, state_event_error),
+    M_TRANSITION(SM_I_NETWORK_REQUEST_DEACTIVATE,          state_event_error),
+    M_TRANSITION(SM_I_NETWORK_REQUEST_MODIFY,              state_event_error),
+    M_TRANSITION(SM_I_NETWORK_REQUEST_MODIFY_FAILED,       state_event_error),
+    M_TRANSITION(SM_I_USER_PLANE_ACTIVATED,                state_event_error),
+    M_TRANSITION(SM_I_USER_PLANE_DEACTIVATED,              state_event_error),
+    M_TRANSITION(SM_I_USER_PLANE_MODIFIED,                 state_event_error),
+    M_TRANSITION(SM_I_DEACTIVATE_COMPLETED,                state_event_error)
+  },
+  {  /* S13: SM_CONTEXT_REACTIVATING_USER_PLANE */
+    M_TRANSITION(SM_P_SMREG_PDP_ACTIVATE_REQ,              state_event_error),
+    M_TRANSITION(SM_P_SMREG_PDP_ACTIVATE_REJ_RES,          state_event_error),
+    M_TRANSITION(SM_P_SMREG_PDP_ACTIVATE_SEC_REQ,          state_event_error),
+    M_TRANSITION(SM_P_SMREG_PDP_MODIFY_REQ,                state_event_error),
+    M_TRANSITION(SM_I_CONTEXT_DEACTIVATE,                  handle_context_deactivate),
+    M_TRANSITION(SM_I_CONTEXT_LOCAL_DEACTIVATE,            handle_local_deactivate),
+    M_TRANSITION(SM_I_CONTEXT_REACTIVATE,                  state_event_error),
+    M_TRANSITION(SM_I_CONTEXT_UPGRADE,                     state_event_error),
+    M_TRANSITION(SM_I_CONTEXT_USER_PLANE_ERROR,            handle_user_plane_error_while_active),
+    M_TRANSITION(SM_I_NETWORK_ACTIVATE_COMPLETED,          state_event_error),
+    M_TRANSITION(SM_I_NETWORK_ACTIVATE_REJECTED,           state_event_error),
+    M_TRANSITION(SM_I_NETWORK_DEACTIVATE_COMPLETED,        state_event_error),
+    M_TRANSITION(SM_I_NETWORK_MODIFY_REJECTED,             state_event_error),
+    M_TRANSITION(SM_I_NETWORK_MODIFY_COMPLETED,            state_event_error),
+    M_TRANSITION(SM_I_NETWORK_REQUEST_ACTIVATION,          state_event_error),
+    M_TRANSITION(SM_I_NETWORK_REQUEST_ACTIVATION_OVERRIDE, state_event_error),
+    M_TRANSITION(SM_I_NETWORK_REQUEST_DEACTIVATE,          state_event_error),
+    M_TRANSITION(SM_I_NETWORK_REQUEST_MODIFY,              state_event_error),
+    M_TRANSITION(SM_I_NETWORK_REQUEST_MODIFY_FAILED,       state_event_error),
+    M_TRANSITION(SM_I_USER_PLANE_ACTIVATED,                handle_user_plane_activated_in_S13),
+    M_TRANSITION(SM_I_USER_PLANE_DEACTIVATED,              state_event_error),
+    M_TRANSITION(SM_I_USER_PLANE_MODIFIED,                 state_event_error),
+    M_TRANSITION(SM_I_DEACTIVATE_COMPLETED,                state_event_error)
+  },
+  {  /* S14: SM_CONTEXT_DEACTIVATING */
+    M_TRANSITION(SM_P_SMREG_PDP_ACTIVATE_REQ,              state_event_error),
+    M_TRANSITION(SM_P_SMREG_PDP_ACTIVATE_REJ_RES,          state_event_error),
+    M_TRANSITION(SM_P_SMREG_PDP_ACTIVATE_SEC_REQ,          state_event_error),
+    M_TRANSITION(SM_P_SMREG_PDP_MODIFY_REQ,                state_event_error),
+    M_TRANSITION(SM_I_CONTEXT_DEACTIVATE,                  go_to_S15),
+    M_TRANSITION(SM_I_CONTEXT_LOCAL_DEACTIVATE,            state_event_error),
+    M_TRANSITION(SM_I_CONTEXT_REACTIVATE,                  state_event_error),
+    M_TRANSITION(SM_I_CONTEXT_UPGRADE,                     state_event_error),
+    M_TRANSITION(SM_I_CONTEXT_USER_PLANE_ERROR,            state_event_error),
+    M_TRANSITION(SM_I_NETWORK_ACTIVATE_COMPLETED,          state_event_error),
+    M_TRANSITION(SM_I_NETWORK_ACTIVATE_REJECTED,           state_event_error),
+    M_TRANSITION(SM_I_NETWORK_DEACTIVATE_COMPLETED,        forward_network_deactivate_completed),
+    M_TRANSITION(SM_I_NETWORK_MODIFY_REJECTED,             state_event_error),
+    M_TRANSITION(SM_I_NETWORK_MODIFY_COMPLETED,            state_event_error),
+    M_TRANSITION(SM_I_NETWORK_REQUEST_ACTIVATION,          state_event_error),
+    M_TRANSITION(SM_I_NETWORK_REQUEST_ACTIVATION_OVERRIDE, state_event_error),
+    M_TRANSITION(SM_I_NETWORK_REQUEST_DEACTIVATE,          state_event_error),
+    M_TRANSITION(SM_I_NETWORK_REQUEST_MODIFY,              state_event_error),
+    M_TRANSITION(SM_I_NETWORK_REQUEST_MODIFY_FAILED,       state_event_error),
+    M_TRANSITION(SM_I_USER_PLANE_ACTIVATED,                state_event_error),
+    M_TRANSITION(SM_I_USER_PLANE_DEACTIVATED,              forward_user_plane_deactivated),
+    M_TRANSITION(SM_I_USER_PLANE_MODIFIED,                 state_event_error),
+    M_TRANSITION(SM_I_DEACTIVATE_COMPLETED,                handle_deactivate_completed_in_S14)
+  },
+  {  /* S15: SM_CONTEXT_DEACTIVATING_SEQUENCED */
+    M_TRANSITION(SM_P_SMREG_PDP_ACTIVATE_REQ,              state_event_error),
+    M_TRANSITION(SM_P_SMREG_PDP_ACTIVATE_REJ_RES,          state_event_error),
+    M_TRANSITION(SM_P_SMREG_PDP_ACTIVATE_SEC_REQ,          state_event_error),
+    M_TRANSITION(SM_P_SMREG_PDP_MODIFY_REQ,                state_event_error),
+    M_TRANSITION(SM_I_CONTEXT_DEACTIVATE,                  state_event_error),
+    M_TRANSITION(SM_I_CONTEXT_LOCAL_DEACTIVATE,            handle_local_deactivate),
+    M_TRANSITION(SM_I_CONTEXT_REACTIVATE,                  state_event_error),
+    M_TRANSITION(SM_I_CONTEXT_UPGRADE,                     state_event_error),
+    M_TRANSITION(SM_I_CONTEXT_USER_PLANE_ERROR,            state_event_error),
+    M_TRANSITION(SM_I_NETWORK_ACTIVATE_COMPLETED,          state_event_error),
+    M_TRANSITION(SM_I_NETWORK_ACTIVATE_REJECTED,           state_event_error),
+    M_TRANSITION(SM_I_NETWORK_DEACTIVATE_COMPLETED,        forward_network_deactivate_completed),
+    M_TRANSITION(SM_I_NETWORK_MODIFY_REJECTED,             state_event_error),
+    M_TRANSITION(SM_I_NETWORK_MODIFY_COMPLETED,            state_event_error),
+    M_TRANSITION(SM_I_NETWORK_REQUEST_ACTIVATION,          state_event_error),
+    M_TRANSITION(SM_I_NETWORK_REQUEST_ACTIVATION_OVERRIDE, state_event_error),
+    M_TRANSITION(SM_I_NETWORK_REQUEST_DEACTIVATE,          state_event_error),
+    M_TRANSITION(SM_I_NETWORK_REQUEST_MODIFY,              state_event_error),
+    M_TRANSITION(SM_I_NETWORK_REQUEST_MODIFY_FAILED,       state_event_error),
+    M_TRANSITION(SM_I_USER_PLANE_ACTIVATED,                state_event_error),
+    M_TRANSITION(SM_I_USER_PLANE_DEACTIVATED,              forward_user_plane_deactivated),
+    M_TRANSITION(SM_I_USER_PLANE_MODIFIED,                 state_event_error),
+    M_TRANSITION(SM_I_DEACTIVATE_COMPLETED,                handle_deactivate_completed_in_S15)
+  }
+};
+
+/*==== PRIVATE FUNCTIONS ====================================================*/
+
+/*
++------------------------------------------------------------------------------
+| Function    : state_event_error
++------------------------------------------------------------------------------
+| Description : General function used to report state event errors.
+|
+| Parameters  : context          - Not used
+|               data             - Not used
++------------------------------------------------------------------------------
+*/
+static void state_event_error(/*@unused@*/ struct T_SM_CONTEXT_DATA *context, /*@unused@*/ /*@null@*/ void *data)
+{
+  (void)TRACE_ERROR("SM Context Control: STATE EVENT ERROR!");
+}
+
+/*
++------------------------------------------------------------------------------
+| Function    : go_to_S*
++------------------------------------------------------------------------------
+| Description : General function used for simple state transitions with no
+|               actions.
+|
+| Parameters  : context          - Context data
+|               data             - Not used
++------------------------------------------------------------------------------
+*/
+static void go_to_S5(struct T_SM_CONTEXT_DATA *context, /*@unused@*/ /*@null@*/ void *data)
+{
+  context->context_control_state = SM_CONTEXT_ACTIVATED;
+}
+
+static void go_to_S15(struct T_SM_CONTEXT_DATA *context, /*@unused@*/ /*@null@*/ void *data)
+{
+  context->context_control_state = SM_CONTEXT_DEACTIVATING_SEQUENCED;
+}
+
+/*
++------------------------------------------------------------------------------
+| Function    : forward_network_deactivate_completed,
+|               forward_user_plane_deactivated
++------------------------------------------------------------------------------
+| Description : Functions used for forwarding deactivation primitives to
+|               Context Deactivate Control
+|
+| Parameters  : context          - Context data
+|               data             - Not used
++------------------------------------------------------------------------------
+*/
+static void forward_network_deactivate_completed(struct T_SM_CONTEXT_DATA *context, /*@unused@*/ /*@null@*/ void *data)
+{
+  sm_context_deactivate_control(context, SM_I_DEACTIVATE_NETWORK_COMPLETED, NULL);
+}
+
+static void forward_user_plane_deactivated(struct T_SM_CONTEXT_DATA *context, /*@unused@*/ /*@null@*/ void *data)
+{
+  sm_context_deactivate_control(context, SM_I_DEACTIVATE_USER_PLANE_COMPLETED, NULL);
+}
+
+/*
++------------------------------------------------------------------------------
+| Function    : handle_smreg_pdp_activate_req
++------------------------------------------------------------------------------
+| Description : Handle event SM_P_SMREG_PDP_ACTIVATE_REQ in S0 and S1
+|
+| Parameters  : context          - Context data
+|               data             - T_SMREG_PDP_ACTIVATE_REQ *
++------------------------------------------------------------------------------
+*/
+static void handle_smreg_pdp_activate_req(struct T_SM_CONTEXT_DATA *context, /*@null@*/ void *data)
+{
+  (void)TRACE_FUNCTION("handle_smreg_pdp_activate_req");
+
+  /* Go to state SM CONTEXT ACTIVATING NETWORK */
+  context->context_control_state = SM_CONTEXT_ACTIVATING_NETWORK;
+
+  /* Start primary context activation towards network */
+  sm_network_control(context, SM_I_NETWORK_ACTIVATE_PRIMARY, data);
+
+  /* Inform User Plane Control of pending context activation */
+  sm_user_plane_control(context, SM_I_USER_PLANE_ACTIVATE_START, data);
+}
+
+/*
++------------------------------------------------------------------------------
+| Function    : handle_smreg_pdp_activate_sec_req
++------------------------------------------------------------------------------
+| Description : Handle event SM_P_SMREG_PDP_ACTIVATE_SEC_REQ
+|
+| Parameters  : context          - Context data
+|               data             - T_SMREG_PDP_ACTIVATE_SEC_REQ *
++------------------------------------------------------------------------------
+*/
+static void handle_smreg_pdp_activate_sec_req(struct T_SM_CONTEXT_DATA *context, /*@null@*/ void *data)
+{
+  (void)TRACE_FUNCTION("handle_smreg_pdp_activate_sec_req");
+
+  /* Go to state SM CONTEXT ACTIVATING NETWORK */
+  context->context_control_state = SM_CONTEXT_ACTIVATING_NETWORK;
+
+  /* Start secondary context activation towards network */
+  sm_network_control(context, SM_I_NETWORK_ACTIVATE_SECONDARY, data);
+
+  /* Inform User Plane Control of pending context activation */
+  sm_user_plane_control(context, SM_I_USER_PLANE_ACTIVATE_START, data);
+}
+
+/*
++------------------------------------------------------------------------------
+| Function    : handle_smreg_pdp_activate_rej_res
++------------------------------------------------------------------------------
+| Description : Handle event SM_P_SMREG_PDP_ACTIVATE_REJ_RES
+|
+| Parameters  : context          - Context data
+|               data             - T_SMREG_PDP_ACTIVATE_REJ_RES *
++------------------------------------------------------------------------------
+*/
+static void handle_smreg_pdp_activate_rej_res(struct T_SM_CONTEXT_DATA *context, /*@null@*/ void *data)
+{
+  T_SMREG_PDP_ACTIVATE_REJ_RES *prim = (T_SMREG_PDP_ACTIVATE_REJ_RES *)data;
+  (void)TRACE_FUNCTION("handle_smreg_pdp_activate_rej_res");
+
+  TRACE_ASSERT(prim != NULL);
+  /*lint -e613 (Possible use of null pointer 'prim' in left argument to operator '->') */
+  sm_set_nw_cause(context, prim->ps_cause.ctrl_value, prim->ps_cause.value.nwsm_cause);
+  
+  /* Reject MT activation attempt towards the network */
+  sm_network_control(context, SM_I_NETWORK_REQUEST_ACTIVATION_REJECT, NULL);
+  /*lint +e613 (Possible use of null pointer 'prim' in left argument to operator '->') */
+}
+
+/*
++------------------------------------------------------------------------------
+| Function    : handle_smreg_pdp_modify_req
++------------------------------------------------------------------------------
+| Description : Handle event SM_P_SMREG_PDP_MODIFY_REQ
+|
+| Parameters  : context          - Context data
+|               data             - T_SMREG_PDP_MODIFY_REQ *
++------------------------------------------------------------------------------
+*/
+static void handle_smreg_pdp_modify_req(struct T_SM_CONTEXT_DATA *context, /*@null@*/ void *data)
+{
+  T_SMREG_PDP_MODIFY_REQ *prim = (T_SMREG_PDP_MODIFY_REQ *)data;
+  (void)TRACE_FUNCTION("handle_smreg_pdp_modify_req");
+
+  TRACE_ASSERT(prim != NULL);
+
+  /* Go to state SM CONTEXT MODIFYING IN NETWORK */
+  context->context_control_state = SM_CONTEXT_MODIFYING_IN_NETWORK;
+
+/*lint +e613 (Possible use of null pointer 'prim' in left argument to operator '->') */
+  /* Start modification in network */
+  sm_network_control(context, SM_I_NETWORK_MODIFY, prim);
+}
+
+/*
++------------------------------------------------------------------------------
+| Function    : handle_network_request_activation_in_S0
++------------------------------------------------------------------------------
+| Description : Handle event SM_I_NETWORK_REQUEST_ACTIVATION in state S0
+|
+| Parameters  : context          - Context data
+|               data             - Not used
++------------------------------------------------------------------------------
+*/
+static void handle_network_request_activation_in_S0(struct T_SM_CONTEXT_DATA *context, /*@null@*/ /*@unused@*/ void *data)
+{
+  (void)TRACE_FUNCTION("handle_network_request_activation_in_S0");
+
+  /* Go to state SM CONTEXT ACTIVATING MT */
+  context->context_control_state = SM_CONTEXT_ACTIVATING_MT;
+
+  /* Send SMREG_PDP_ACTIVATE_IND to ACI */
+  send_smreg_pdp_activate_ind(context);
+}
+
+/*
++------------------------------------------------------------------------------
+| Function    : handle_network_request_activation_in_S1
++------------------------------------------------------------------------------
+| Description : Handle event SM_I_NETWORK_REQUEST_ACTIVATION in state S1
+|
+| Parameters  : context          - Context data
+|               data             - T_REQUEST_PDP_CONTEXT_ACTIVATION *
++------------------------------------------------------------------------------
+*/
+static void handle_network_request_activation_in_S1(struct T_SM_CONTEXT_DATA *context, /*@null@*/ /*@unused@*/ void *data)
+{
+  T_REQUEST_PDP_CONTEXT_ACTIVATION *msg = (T_REQUEST_PDP_CONTEXT_ACTIVATION *)data;
+  (void)TRACE_FUNCTION("handle_network_request_activation_in_S1");
+
+  TRACE_ASSERT(msg != NULL);
+
+  /* Check whether PDP type, APN, and address match */
+  /*lint -e613 (Possible use of null pointer 'msg' in left argument to operator '->') */
+  if (sm_nw_is_address_and_apn_equal(context, &context->requested_address,
+                                     &msg->address, msg->v_apn, &msg->apn))
+  {
+    /* Ignore incoming request - proceed with current activation */
+  } else {
+    sm_set_nw_cause(context, CAUSE_is_from_nwsm, (U16)CAUSE_NWSM_INSUFFICIENT_RESOURCES);
+    sm_network_control(context, SM_I_NETWORK_REQUEST_ACTIVATION_REJECT, NULL);
+  }
+}
+
+/*
++------------------------------------------------------------------------------
+| Function    : handle_network_request_activation_override
++------------------------------------------------------------------------------
+| Description : Handle event SM_I_NETWORK_REQUEST_ACTIVATION_OVERRIDE in S5
+|
+| Parameters  : context          - Context data
+|               data             - Not used
++------------------------------------------------------------------------------
+*/
+static void handle_network_request_activation_override(struct T_SM_CONTEXT_DATA *context, /*@null@*/ /*@unused@*/ void *data)
+{
+  (void)TRACE_FUNCTION("handle_network_request_activation_override");
+
+  /* Go to state SM CONTEXT ACTIVATION OVERRIDE */
+  context->context_control_state = SM_CONTEXT_ACTIVATION_OVERRIDE;
+
+  /* Inform Sequencer of activation override */
+  sm_sequencer(SM_I_CONTEXT_ACTIVATION_OVERRIDE, (void *)(T_NAS_ti)context->ti);
+}
+
+/*
++------------------------------------------------------------------------------
+| Function    : handle_network_request_deactivate
++------------------------------------------------------------------------------
+| Description : Handle event SM_I_NETWORK_REQUEST_DEACTIVATE
+|
+| Parameters  : context          - Context data
+|               data             - Tear-down indicator
++------------------------------------------------------------------------------
+*/
+static void handle_network_request_deactivate(struct T_SM_CONTEXT_DATA *context, /*@null@*/ void *data)
+{
+  U32               tear_down    = (U32)data;
+  T_CAUSE_ps_cause *cause        = sm_get_aci_cause(context);
+  U16               nsapi_as_set = sm_nsapi2nsapi_set(context->nsapi);
+  U16               nsapis_to_deactivate;
+
+  (void)TRACE_FUNCTION("handle_network_request_deactivate");
+
+  if (cause->ctrl_value       == CAUSE_is_from_nwsm &&
+      cause->value.nwsm_cause == (U16)CAUSE_NWSM_REACTIVATION_REQUESTED)
+  {
+    /* Go to state SM CONTEXT REACTIVATING DEACTIVATING USER PLANE */
+    context->context_control_state = SM_CONTEXT_REACTIVATING_DEACTIVATING_USER_PLANE;
+
+    nsapis_to_deactivate = 0;
+  } else {
+    /* Go to state SM CONTEXT DEACTIVATED */
+    context->context_control_state = SM_CONTEXT_DEACTIVATED;
+
+    nsapis_to_deactivate = nsapi_as_set;
+  }
+
+  if (tear_down != 0)
+  {
+    nsapis_to_deactivate |= sm_linked_nsapis(context->ti);
+
+    /* Inform Sequencer of tear-down deactivation */
+    sm_sequencer(SM_I_CONTEXT_TEAR_DOWN_DEACTIVATE,
+                 (void *)(T_NAS_ti)context->ti);
+
+    /* Send SMREG_PDP_DEACTIVATE_IND for all context being deactivated */
+    if (nsapis_to_deactivate != 0)
+    {
+      send_smreg_pdp_deactivate_ind(nsapis_to_deactivate,
+                                    sm_get_aci_cause(context));
+    }
+  } else {
+    /* Send SMREG_PDP_DEACTIVATE_IND for this single context. */
+    if (nsapis_to_deactivate != 0)
+    {
+      send_smreg_pdp_deactivate_ind(nsapi_as_set, sm_get_aci_cause(context));
+    }
+  }
+
+  /* Deactivate user plane */
+  sm_context_deactivate_control(context, SM_I_DEACTIVATE_USER_PLANE,
+                                (void *)PS_REL_IND_NO);
+}
+
+/*
++------------------------------------------------------------------------------
+| Function    : handle_network_activate_completed_in_S2
++------------------------------------------------------------------------------
+| Description : Handle event SM_I_NETWORK_ACTIVATE_COMPLETED in state S2
+|
+| Parameters  : context          - Context data
+|               data             - Not used
++------------------------------------------------------------------------------
+*/
+static void handle_network_activate_completed_in_S2(struct T_SM_CONTEXT_DATA *context, /*@null@*/ /*@unused@*/void *data)
+{
+  (void)TRACE_FUNCTION("handle_network_activate_completed_in_S2");
+
+  /* Go to state SM CONTEXT ACTIVATING USER PLANE */
+  context->context_control_state = SM_CONTEXT_ACTIVATING_USER_PLANE;
+
+  /* Activate User Plane */
+  sm_user_plane_control(context, SM_I_USER_PLANE_ACTIVATE_COMPLETE, NULL);
+}
+
+/*
++------------------------------------------------------------------------------
+| Function    : handle_network_activate_completed_in_S6
++------------------------------------------------------------------------------
+| Description : Handle event SM_I_NETWORK_ACTIVATE_COMPLETED in state S6
+|
+| Parameters  : context          - Context data
+|               data             - (enum) T_SM_UPDATE_FLAGS
++------------------------------------------------------------------------------
+*/
+static void handle_network_activate_completed_in_S6(struct T_SM_CONTEXT_DATA *context, /*@null@*/ void *data)
+{
+  T_SM_UPDATE_FLAGS update_flags = (T_SM_UPDATE_FLAGS)((UINT)data);
+  (void)TRACE_FUNCTION("handle_network_activate_completed_in_S6");
+
+  if (sm_is_aci_update_required(update_flags))
+  {
+    /* Inform ACI of new parameters */
+    send_smreg_pdp_modify_ind(context, update_flags);
+  }
+
+  if (sm_is_user_plane_update_required(update_flags))
+  {
+    /* Go to state SM CONTEXT MODIFYING USER PLANE MT */
+    context->context_control_state = SM_CONTEXT_MODIFYING_USER_PLANE_MT;
+
+    /* Modify User Plane */
+    sm_user_plane_control(context, SM_I_USER_PLANE_MODIFY, NULL);
+  } else {
+    /* Go to state SM CONTEXT ACTIVATED */
+    context->context_control_state = SM_CONTEXT_ACTIVATED;
+  }
+}
+
+/*
++------------------------------------------------------------------------------
+| Function    : handle_network_activate_completed_in_S12
++------------------------------------------------------------------------------
+| Description : Handle event SM_I_NETWORK_ACTIVATE_COMPLETED in state S12
+|
+| Parameters  : context          - Context data
+|               data             - Not used
++------------------------------------------------------------------------------
+*/
+static void handle_network_activate_completed_in_S12(struct T_SM_CONTEXT_DATA *context, /*@null@*/ /*@unused@*/void *data)
+{
+  (void)TRACE_FUNCTION("handle_network_activate_completed_in_S12");
+
+  /* Go to state SM CONTEXT REACTIVATING USER PLANE */
+  context->context_control_state = SM_CONTEXT_REACTIVATING_USER_PLANE;
+
+  /* Activate User Plane */
+  sm_user_plane_control(context, SM_I_USER_PLANE_ACTIVATE_COMPLETE, NULL);
+}
+
+/*
++------------------------------------------------------------------------------
+| Function    : handle_network_activate_rejected_in_S2
++------------------------------------------------------------------------------
+| Description : Handle event SM_I_NETWORK_ACTIVATE_REJECTED in state S2
+|
+| Parameters  : context          - Context data
+|               data             - Deactivate network trigger (BOOL)
++------------------------------------------------------------------------------
+*/
+static void handle_network_activate_rejected_in_S2(struct T_SM_CONTEXT_DATA *context, /*@null@*/ void *data)
+{
+  BOOL  deactivate_network = (data != NULL ? TRUE : FALSE);
+  (void)TRACE_FUNCTION("handle_network_activate_rejected_in_S2");
+
+  /* Go to state SM CONTEXT ACTIVATE FAILED DEACTIVATING */
+  context->context_control_state = SM_CONTEXT_ACTIVATE_FAILED_DEACTIVATING;
+
+  if (deactivate_network)
+  {
+    /* Deactivate user plane.  Also, network is being deactivated;
+     * Deactivation Control should anticipate NETWORK_DEACTIVATE_COMPLETED. */
+    sm_context_deactivate_control(context,
+                                  SM_I_DEACTIVATE_NETWORK_AND_USER_PLANE,
+                                  sm_get_nw_cause(context));
+  } else {
+    /* Dectivate User Plane */
+    sm_context_deactivate_control(context, SM_I_DEACTIVATE_USER_PLANE,
+                                  (void *)PS_REL_IND_NO);
+  }
+}
+
+/*
++------------------------------------------------------------------------------
+| Function    : handle_network_activate_rejected_in_S6
++------------------------------------------------------------------------------
+| Description : Handle event SM_I_NETWORK_ACTIVATE_REJECTED in state S6
+|
+| Parameters  : context          - Context data
+|               data             - Deactivate network trigger (BOOL)
++------------------------------------------------------------------------------
+*/
+static void handle_network_activate_rejected_in_S6(struct T_SM_CONTEXT_DATA *context, /*@unused@*/ /*@null@*/ void *data)
+{
+  (void)TRACE_FUNCTION("handle_network_activate_rejected_in_S6");
+
+  /* Inform ACI of failure and deactivation */
+  send_smreg_pdp_deactivate_ind(sm_nsapi2nsapi_set(context->nsapi),
+                                sm_get_aci_cause(context));
+
+  /* Go to state SM CONTEXT DEACTIVATING */
+  context->context_control_state = SM_CONTEXT_DEACTIVATING;
+
+  /* Deactivate User Plane */
+  sm_context_deactivate_control(context, SM_I_DEACTIVATE_USER_PLANE,
+                                (void *)PS_REL_IND_NO);
+}
+
+/*
++------------------------------------------------------------------------------
+| Function    : handle_network_activate_rejected_in_S12
++------------------------------------------------------------------------------
+| Description : Handle event SM_I_NETWORK_ACTIVATE_REJECTED in state S12
+|
+| Parameters  : context          - Context data
+|               data             - Deactivate network trigger (BOOL)
++------------------------------------------------------------------------------
+*/
+static void handle_network_activate_rejected_in_S12(struct T_SM_CONTEXT_DATA *context, /*@unused@*/ /*@null@*/ void *data)
+{
+  (void)TRACE_FUNCTION("handle_network_activate_rejected_in_S12");
+
+  /* Inform ACI of failure and deactivation */
+  send_smreg_pdp_deactivate_ind(sm_nsapi2nsapi_set(context->nsapi),
+                                sm_get_aci_cause(context));
+
+  /* Go to state SM CONTEXT DEACTIVATING */
+  context->context_control_state = SM_CONTEXT_DEACTIVATING;
+
+  /* Deactivate User Plane */
+  sm_context_deactivate_control(context, SM_I_DEACTIVATE_USER_PLANE,
+                                (void *)PS_REL_IND_NO);
+}
+
+/*
++------------------------------------------------------------------------------
+| Function    : handle_network_modify_rejected_in_S7
++------------------------------------------------------------------------------
+| Description : Handle event SM_I_NETWORK_MODIFY_REJECTED in state S7
+|
+| Parameters  : context          - Context data
+|               data             - BOOL (Deactivate context due to T3381)
++------------------------------------------------------------------------------
+*/
+static void handle_network_modify_rejected_in_S7(struct T_SM_CONTEXT_DATA *context, /*@null@*/ void *data)
+{
+  BOOL               deactivate_context = (BOOL)((UINT)data);
+  T_CAUSE_ps_cause  *cause = sm_get_aci_cause(context);
+  (void)TRACE_FUNCTION("handle_network_modify_rejected_in_S7");
+
+  TRACE_ASSERT(cause != NULL);
+
+  /*lint -e613 (Possible use of null pointer 'cause' in left argument to operator '->') */
+  /* Inform ACI of failed modification attempt */
+  send_smreg_pdp_modify_rej(context->nsapi, cause);
+
+  /* In case of modify collisions or timeouts, the context remains active */
+  if (deactivate_context       != TRUE &&
+      (cause->ctrl_value       == CAUSE_is_from_sm &&
+       cause->value.sm_cause   == (U16)CAUSE_SM_MODIFY_COLLISION
+       ||
+       cause->ctrl_value       == CAUSE_is_from_nwsm &&
+       cause->value.nwsm_cause == (U16)CAUSE_NWSM_NETWORK_FAILURE))
+  {
+    /* Go to state SM CONTEXT ACTIVATED */
+    context->context_control_state = SM_CONTEXT_ACTIVATED;
+  } else {
+    /* Other errors: Context is deactivated */
+    send_smreg_pdp_deactivate_ind(sm_nsapi2nsapi_set(context->nsapi), cause);
+
+    /* Go to state SM CONTEXT DEACTIVATING */
+    context->context_control_state = SM_CONTEXT_DEACTIVATING;
+
+    /* Deactivate Network and User Plane (Network deactivation in progress) */
+    sm_context_deactivate_control(context, SM_I_DEACTIVATE_NETWORK_AND_USER_PLANE, cause);
+    /*lint +e613 (Possible use of null pointer 'cause' in left argument to operator '->') */
+  }
+}
+
+/*
++------------------------------------------------------------------------------
+| Function    : handle_network_modify_rejected_in_S10
++------------------------------------------------------------------------------
+| Description : Handle event SM_I_NETWORK_MODIFY_REJECTED in state S10
+|
+| Parameters  : context          - Context data
+|               data             - BOOL (Deactivate context due to T3381)
++------------------------------------------------------------------------------
+*/
+static void handle_network_modify_rejected_in_S10(struct T_SM_CONTEXT_DATA *context, /*@null@*/ void *data)
+{
+  BOOL               deactivate_context = (BOOL)((UINT)data);
+  T_CAUSE_ps_cause  *cause = sm_get_aci_cause(context);
+  (void)TRACE_FUNCTION("handle_network_modify_rejected_in_S10");
+
+  TRACE_ASSERT(cause != NULL);
+
+  /* In case of modify collision, timeout, or temporary out-of-resources
+   * the context remains active */
+ /*lint -e613 (Possible use of null pointer 'cause' in left argument to operator '->') */
+  if (deactivate_context       != TRUE &&
+      (cause->ctrl_value       == CAUSE_is_from_sm &&
+       cause->value.sm_cause   == (U16)CAUSE_SM_MODIFY_COLLISION
+       ||
+       cause->ctrl_value       == CAUSE_is_from_nwsm &&
+       cause->value.nwsm_cause == (U16)CAUSE_NWSM_NETWORK_FAILURE
+       ||
+       cause->ctrl_value       == CAUSE_is_from_nwsm &&
+       cause->value.nwsm_cause == (U16)CAUSE_NWSM_INSUFFICIENT_RESOURCES))
+  {
+    /* Go to state SM CONTEXT ACTIVATED */
+    context->context_control_state = SM_CONTEXT_ACTIVATED;
+  } else {
+    /* Other errors: Context is deactivated */
+    send_smreg_pdp_deactivate_ind(sm_nsapi2nsapi_set(context->nsapi), cause);
+    /*lint +e613 (Possible use of null pointer 'cause' in left argument to operator '->') */	
+
+    /* Go to state SM CONTEXT DEACTIVATING */
+    context->context_control_state = SM_CONTEXT_DEACTIVATING;
+
+    /* Deactivate Network and User Plane (Network deactivation in progress) */ 
+    sm_context_deactivate_control(context, SM_I_DEACTIVATE_NETWORK_AND_USER_PLANE, sm_get_nw_cause(context));
+  }
+}
+
+/*
++------------------------------------------------------------------------------
+| Function    : handle_network_modify_completed_in_S7
++------------------------------------------------------------------------------
+| Description : Handle event SM_I_NETWORK_MODIFY_COMPLETED in state S7
+|
+| Parameters  : context          - Context data
+|               data             - T_SM_UPDATE_FLAGS
++------------------------------------------------------------------------------
+*/
+static void handle_network_modify_completed_in_S7(struct T_SM_CONTEXT_DATA *context, /*@null@*/ void *data)
+{
+  T_SM_UPDATE_FLAGS  update_flags = (T_SM_UPDATE_FLAGS)((UINT)data);
+  (void)TRACE_FUNCTION("handle_network_modify_completed_in_S7");
+
+  if (sm_is_user_plane_update_required(update_flags))
+  {
+    /* Go to state SM CONTEXT MODIFYING USER PLANE */
+    context->context_control_state = SM_CONTEXT_MODIFYING_USER_PLANE;
+
+    /* Start user plane modification */
+    sm_user_plane_control(context, SM_I_USER_PLANE_MODIFY, (void *)update_flags);
+  } else {
+    /* Inform ACI of the successful modification and altered fields */
+    send_smreg_pdp_modify_cnf(context, update_flags);
+
+    /* Go to state SM CONTEXT ACTIVATED */
+    context->context_control_state = SM_CONTEXT_ACTIVATED;
+  }
+}
+
+/*
++------------------------------------------------------------------------------
+| Function    : handle_network_modify_completed_in_S10
++------------------------------------------------------------------------------
+| Description : Handle event SM_I_NETWORK_MODIFY_COMPLETED in state S10
+|
+| Parameters  : context          - Context data
+|               data             - (enum) T_SM_UPDATE_FLAGS
++------------------------------------------------------------------------------
+*/
+static void handle_network_modify_completed_in_S10(struct T_SM_CONTEXT_DATA *context, /*@null@*/ void *data)
+{
+  T_SM_UPDATE_FLAGS update_flags = (T_SM_UPDATE_FLAGS)((UINT)data);
+  (void)TRACE_FUNCTION("handle_network_modify_completed_in_S10");
+
+  if (sm_is_aci_update_required(update_flags))
+  {
+    /* Inform ACI of new parameters */
+    send_smreg_pdp_modify_ind(context, update_flags);
+  }
+
+  if (sm_is_user_plane_update_required(update_flags))
+  {
+    /* Go to state SM CONTEXT MODIFYING USER PLANE MT */
+    context->context_control_state = SM_CONTEXT_MODIFYING_USER_PLANE_MT;
+
+    /* Modify User Plane */
+    sm_user_plane_control(context, SM_I_USER_PLANE_MODIFY, NULL);
+  } else {
+    /* Go to state SM CONTEXT ACTIVATED */
+    context->context_control_state = SM_CONTEXT_ACTIVATED;
+  }
+}
+
+/*
++------------------------------------------------------------------------------
+| Function    : handle_user_plane_activated_in_S3
++------------------------------------------------------------------------------
+| Description : Handle event SM_I_USER_PLANE_ACTIVATED in state S3
+|
+| Parameters  : context          - Context data
+|               data             - Not used
++------------------------------------------------------------------------------
+*/
+static void handle_user_plane_activated_in_S3(struct T_SM_CONTEXT_DATA *context, /*@null@*/ /*@unused@*/ void *data)
+{
+  (void)TRACE_FUNCTION("handle_user_plane_activated_in_S3");
+
+  /* Go to state SM CONTEXT ACTIVATED */
+  context->context_control_state = SM_CONTEXT_ACTIVATED;
+
+  /* Confirm activation towards ACI; response depends on primary/secondary */
+  if (!sm_is_secondary(context))
+  {
+    /* Primary context: send SMREG_PDP_ACTIVATE_CNF */
+    send_smreg_pdp_activate_cnf(context);
+  } else {
+    /* Secondary context: send SMREG_PDP_ACTIVATE_SEC_CNF */
+    send_smreg_pdp_activate_sec_cnf(context);
+  }
+}
+
+/*
++------------------------------------------------------------------------------
+| Function    : handle_user_plane_activated_in_S13
++------------------------------------------------------------------------------
+| Description : Handle event SM_I_USER_PLANE_ACTIVATED in state S13
+|
+| Parameters  : context          - Context data
+|               data             - Not used
++------------------------------------------------------------------------------
+*/
+static void handle_user_plane_activated_in_S13(struct T_SM_CONTEXT_DATA *context, /*@null@*/ /*@unused@*/ void *data)
+{
+  (void)TRACE_FUNCTION("handle_user_plane_activated_in_S13");
+
+  /* Go to state SM CONTEXT ACTIVATED */
+  context->context_control_state = SM_CONTEXT_ACTIVATED;
+
+  /* For primary contexts: Inform sequencer that reactivation was successful */
+  if (!sm_is_secondary(context))
+  {
+    sm_sequencer(SM_I_CONTEXT_REACTIVATE_COMPLETED,
+                 (void *)(T_NAS_ti)context->ti);
+  }
+}
+
+/*
++------------------------------------------------------------------------------
+| Function    : handle_user_plane_error_in_S3
++------------------------------------------------------------------------------
+| Description : Handle event SM_I_USER_PLANE_ERROR in state S3
+|
+| Parameters  : context          - Context data
+|               data             - BOOL
++------------------------------------------------------------------------------
+*/
+static void handle_user_plane_error_in_S3(struct T_SM_CONTEXT_DATA *context, /*@null@*/ void *data)
+{
+  (void)TRACE_FUNCTION("handle_user_plane_error_in_S3");
+
+  /* Go to state SM CONTEXT ACTIVATE FAILED DEACTIVATING */
+  context->context_control_state = SM_CONTEXT_ACTIVATE_FAILED_DEACTIVATING;
+
+  /* Dectivate User Plane locally */
+  sm_user_plane_control(context, SM_I_USER_PLANE_DEACTIVATE_LOCAL, data);
+
+  /* Deactivate towards network */
+  sm_set_nw_cause(context, CAUSE_is_from_nwsm, (U16)CAUSE_NWSM_REGULAR_DEACTIVATION);
+  sm_context_deactivate_control(context, SM_I_DEACTIVATE_NETWORK,
+                                sm_get_nw_cause(context));
+}
+
+/*
++------------------------------------------------------------------------------
+| Function    : handle_user_plane_error_while_active
++------------------------------------------------------------------------------
+| Description : Handle event SM_I_USER_PLANE_ERROR in states S5 - S13
+|
+| Parameters  : context          - Context data
+|               data             - BOOL
++------------------------------------------------------------------------------
+*/
+static void handle_user_plane_error_while_active(struct T_SM_CONTEXT_DATA *context, /*@null@*/ void *data)
+{
+  (void)TRACE_FUNCTION("handle_user_plane_error_while_active");
+
+  /* Inform ACI that the context will now be deactivated due to user plane error */
+  send_smreg_pdp_deactivate_ind(sm_nsapi2nsapi_set(context->nsapi),
+                                sm_get_aci_cause(context));
+
+  /* Go to state SM CONTEXT DEACTIVATING */
+  context->context_control_state = SM_CONTEXT_DEACTIVATING;
+
+  /* Dectivate User Plane locally */
+  sm_user_plane_control(context, SM_I_USER_PLANE_DEACTIVATE_LOCAL, data);
+
+  /* Deactivate towards network */
+  sm_set_nw_cause(context, CAUSE_is_from_nwsm, (U16)CAUSE_NWSM_REGULAR_DEACTIVATION);
+  sm_context_deactivate_control(context, SM_I_DEACTIVATE_NETWORK,
+                                sm_get_nw_cause(context));
+}
+
+/*
++------------------------------------------------------------------------------
+| Function    : handle_user_plane_modified_in_S8
++------------------------------------------------------------------------------
+| Description : Handle event SM_I_USER_PLANE_MODIFIED in states S8
+|
+| Parameters  : context          - Context data
+|               data             - Not used
++------------------------------------------------------------------------------
+*/
+static void handle_user_plane_modified_in_S8(struct T_SM_CONTEXT_DATA *context, /*@null@*/ /*@unused@*/ void *data)
+{
+  (void)TRACE_FUNCTION("handle_user_plane_modified_in_S8");
+
+  /* Inform ACI of the successful modification and altered QoS */
+  send_smreg_pdp_modify_cnf(context, SM_UPDATE_QOS);
+
+  /* Go to state SM CONTEXT ACTIVATED */
+  context->context_control_state = SM_CONTEXT_ACTIVATED;
+}
+
+/*
++------------------------------------------------------------------------------
+| Function    : handle_user_plane_deactivated_in_S11
++------------------------------------------------------------------------------
+| Description : Handle event SM_I_USER_PLANE_DEACTIVATED in S11
+|
+| Parameters  : context          - Context data
+|               data             - Not used
++------------------------------------------------------------------------------
+*/
+static void handle_user_plane_deactivated_in_S11(struct T_SM_CONTEXT_DATA *context, /*@null@*/ /*@unused@*/ void *data)
+{
+  (void)TRACE_FUNCTION("handle_user_plane_deactivated_in_S11");
+
+  /* Go to state SM CONTEXT REACTIVATING IN NETWORK */
+  context->context_control_state = SM_CONTEXT_REACTIVATING_IN_NETWORK;
+
+  /* Start primary context activation towards network */
+  sm_network_control(context, SM_I_NETWORK_ACTIVATE_PRIMARY, NULL);
+
+  /* Inform User Plane Control of pending context activation */
+  sm_user_plane_control(context, SM_I_USER_PLANE_ACTIVATE_START, NULL);
+}
+
+/*
++------------------------------------------------------------------------------
+| Function    : handle_deactivate_completed_in_S0
++------------------------------------------------------------------------------
+| Description : Handle event SM_I_DEACTIVATE_COMPLETED in state S0
+|
+| Parameters  : context          - Context data
+|               data             - Not used
++------------------------------------------------------------------------------
+*/
+static void handle_deactivate_completed_in_S0(struct T_SM_CONTEXT_DATA *context, /*@null@*/ /*@unused@*/ void *data)
+{
+  (void)TRACE_FUNCTION("handle_deactivate_completed_in_S0");
+
+  /* Mark context for deallocation after call returns */
+  sm_mark_context_for_deallocation(context);
+}
+
+/*
++------------------------------------------------------------------------------
+| Function    : handle_deactivate_completed_in_S4
++------------------------------------------------------------------------------
+| Description : Handle event SM_I_DEACTIVATE_COMPLETED in state S4
+|
+| Parameters  : context          - Context data
+|               data             - Not used
++------------------------------------------------------------------------------
+*/
+static void handle_deactivate_completed_in_S4(struct T_SM_CONTEXT_DATA *context, /*@null@*/ /*@unused@*/ void *data)
+{
+  (void)TRACE_FUNCTION("handle_deactivate_completed_in_S4");
+
+  /* Go to state SM CONTEXT DEACTIVATED */
+  context->context_control_state = SM_CONTEXT_DEACTIVATED;
+
+  /* Report failed activation to ACI: Response depends on primary/secondary */
+  if (!sm_is_secondary(context))
+  {
+    /* Primary context: send SMREG_PDP_ACTIVATE_REJ */
+    send_smreg_pdp_activate_rej(context->nsapi, sm_get_aci_cause(context));
+  } else {
+    /* Secondary context: send SMREG_PDP_ACTIVATE_SEC_REJ */
+    send_smreg_pdp_activate_sec_rej(context->nsapi, sm_get_aci_cause(context));
+  }
+
+  /* Mark context for deallocation after call returns */
+  sm_mark_context_for_deallocation(context);
+}
+
+/*
++------------------------------------------------------------------------------
+| Function    : handle_deactivate_completed_in_S14
++------------------------------------------------------------------------------
+| Description : Handle event SM_I_DEACTIVATE_COMPLETED in state S14
+|
+| Parameters  : context          - Context data
+|               data             - Not used
++------------------------------------------------------------------------------
+*/
+static void handle_deactivate_completed_in_S14(struct T_SM_CONTEXT_DATA *context, /*@null@*/ /*@unused@*/ void *data)
+{
+  (void)TRACE_FUNCTION("handle_deactivate_completed_in_S14");
+
+  /* Go to state SM CONTEXT DEACTIVATED */
+  context->context_control_state = SM_CONTEXT_DEACTIVATED;
+
+  /* Mark context for deallocation */
+  sm_mark_context_for_deallocation(context);
+}
+
+/*
++------------------------------------------------------------------------------
+| Function    : handle_deactivate_completed_in_S15
++------------------------------------------------------------------------------
+| Description : Handle event SM_I_DEACTIVATE_COMPLETED in state S15
+|
+| Parameters  : context          - Context data
+|               data             - Not used
++------------------------------------------------------------------------------
+*/
+static void handle_deactivate_completed_in_S15(struct T_SM_CONTEXT_DATA *context, /*@null@*/ /*@unused@*/ void *data)
+{
+  (void)TRACE_FUNCTION("handle_deactivate_completed_in_S15");
+
+  /* Go to state SM CONTEXT DEACTIVATED */
+  context->context_control_state = SM_CONTEXT_DEACTIVATED;
+
+  /* Mark context for deallocation */
+  sm_mark_context_for_deallocation(context);
+
+  /* Confirm deactivation towards Sequencer */
+  sm_sequencer(SM_I_CONTEXT_DEACTIVATE_COMPLETED, (void *)(T_NAS_nsapi)context->nsapi);
+}
+
+/*
++------------------------------------------------------------------------------
+| Function    : handle_network_request_modify
++------------------------------------------------------------------------------
+| Description : Handle event SM_I_NETWORK_REQUEST_MODIFY in state S4
+|
+| Parameters  : context          - Context data
+|               data             - Update flags
++------------------------------------------------------------------------------
+*/
+static void handle_network_request_modify(struct T_SM_CONTEXT_DATA *context, /*@null@*/ void *data)
+{
+  T_SM_UPDATE_FLAGS  update_flags = (T_SM_UPDATE_FLAGS)((UINT)data);
+  (void)TRACE_FUNCTION("handle_network_request_modify");
+
+  if (sm_is_aci_update_required(update_flags))
+  {
+    /* Send SMREG_PDP_MODIFY_IND if required */
+    send_smreg_pdp_modify_ind(context, update_flags);
+  }
+
+  if (sm_is_user_plane_update_required(update_flags))
+  {
+    /* Go to state SM CONTEXT MODIFYING USER PLANE MT */
+    context->context_control_state = SM_CONTEXT_MODIFYING_USER_PLANE_MT;
+
+    /* Update User Plane */
+    sm_user_plane_control(context, SM_I_USER_PLANE_MODIFY, (void *)update_flags);
+  }
+}
+
+/*
++------------------------------------------------------------------------------
+| Function    : handle_network_request_modify_failed
++------------------------------------------------------------------------------
+| Description : Handle event SM_I_NETWORK_REQUEST_MODIFY_FAILED
+|
+| Parameters  : context          - Context data
+|               data             - Not used (cause set in context data)
++------------------------------------------------------------------------------
+*/
+static void handle_network_request_modify_failed(struct T_SM_CONTEXT_DATA *context, /*@null@*/ /*@unused@*/ void *data)
+{
+  (void)TRACE_FUNCTION("handle_network_request_modify_failed");
+
+  /* Inform ACI of failed modification and deactivation */
+  send_smreg_pdp_deactivate_ind(sm_nsapi2nsapi_set(context->nsapi),
+                                sm_get_aci_cause(context));
+
+  /* Go to state SM CONTEXT DEACTIVATING */
+  context->context_control_state = SM_CONTEXT_DEACTIVATING;
+
+  /* Start user plane deactivation */
+  sm_context_deactivate_control(context, SM_I_DEACTIVATE_NETWORK_AND_USER_PLANE, sm_get_nw_cause(context));
+}
+
+/*
++------------------------------------------------------------------------------
+| Function    : handle_context_upgrade
++------------------------------------------------------------------------------
+| Description : Handle event SM_I_CONTEXT_UPGRADE in S5
+|
+| Parameters  : context          - Context data
+|               data             - Not used
++------------------------------------------------------------------------------
+*/
+static void handle_context_upgrade(struct T_SM_CONTEXT_DATA *context, /*@null@*/ /*@unused@*/ void *data)
+{
+  (void)TRACE_FUNCTION("handle_context_upgrade");
+
+  /* Go to state SM CONTEXT UPGRADING IN NETWORK */
+  context->context_control_state = SM_CONTEXT_UPGRADING_IN_NETWORK;
+
+  /* Start a network modify procedure in order to re-upgrade QoS */
+  sm_network_control(context, SM_I_NETWORK_MODIFY, NULL);
+}
+
+/*
++------------------------------------------------------------------------------
+| Function    : handle_context_reactivate
++------------------------------------------------------------------------------
+| Description : Handle event SM_I_CONTEXT_REACTIVATE in deactivate(d) states
+|
+| Parameters  : context          - Context data
+|               data             - not used
++------------------------------------------------------------------------------
+*/
+void handle_context_reactivate(struct T_SM_CONTEXT_DATA *context, /*@unused@*/ /*@null@*/ void *data)
+{
+  (void)TRACE_FUNCTION("handle_context_reactivate");
+
+  /* Go to state SM CONTEXT DEACTIVATING SEQUENCED */
+  context->context_control_state = SM_CONTEXT_REACTIVATING_IN_NETWORK;
+
+  /* Start primary or secondary activation depending on context type */
+  if (sm_is_secondary(context)) {
+    sm_network_control(context, SM_I_NETWORK_ACTIVATE_SECONDARY, NULL);
+  } else {
+    sm_network_control(context, SM_I_NETWORK_ACTIVATE_PRIMARY, NULL);
+  }
+  /* (Re)start user plane */
+  sm_user_plane_control(context, SM_I_USER_PLANE_ACTIVATE_START, NULL);
+}
+
+/*
++------------------------------------------------------------------------------
+| Function    : handle_context_deactivate_in_S0
++------------------------------------------------------------------------------
+| Description : Handle event SM_I_CONTEXT_DEACTIVATE in S0
+|               Note: User Plane is deactivating in this state
+|
+| Parameters  : context          - Context data
+|               data             - deactivation type
++------------------------------------------------------------------------------
+*/
+static void handle_context_deactivate_in_S0(/*@unused@*/ struct T_SM_CONTEXT_DATA *context, /*@null@*/ void *data)
+{
+  int nsapi;
+  
+  T_SM_CONTEXT_DEACTIVATE_CONTROL_EVENT event = (T_SM_CONTEXT_DEACTIVATE_CONTROL_EVENT)((UINT)data);
+  (void)TRACE_FUNCTION("SM Context Control: handle_context_deactivate_in_S0");
+
+  if (event == SM_I_DEACTIVATE_USER_PLANE ||
+      event == SM_I_DEACTIVATE_NETWORK_AND_USER_PLANE)
+  {
+    /* Network deactivation ignored - already deactivated */
+    sm_context_deactivate_control(context, SM_I_DEACTIVATE_USER_PLANE,
+                                  (void *)PS_REL_IND_NO); 
+    /*ACI requested deactivation of an already inactive context. Acknowledge*/
+    send_smreg_pdp_deactivate_cnf(sm_data.sm_nsapis_requested_deactivated);
+
+   /* If the context is not freed, clear it here so that future SMREG_PDP_ACTIVATE_REQ
+     * served properly 
+     */
+    for (nsapi = (int)NAS_NSAPI_5; nsapi < NAS_SIZE_NSAPI; nsapi++)
+    {
+      if (sm_is_nsapi_in_nsapi_set(nsapi, sm_data.sm_nsapis_requested_deactivated)) 
+      {
+        sm_free_context_data_by_nsapi(nsapi);
+      }
+    }
+  }
+  /* Network-only deactivation ignored - already deactivated */
+}
+
+/*
++------------------------------------------------------------------------------
+| Function    : handle_context_deactivate
++------------------------------------------------------------------------------
+| Description : Handle event SM_I_CONTEXT_DEACTIVATE in active states
+|
+| Parameters  : context          - Context data
+|               data             - deactivation type
++------------------------------------------------------------------------------
+*/
+void handle_context_deactivate(struct T_SM_CONTEXT_DATA *context, /*@null@*/ void *data)
+{
+  T_SM_CONTEXT_DEACTIVATE_CONTROL_EVENT event = (T_SM_CONTEXT_DEACTIVATE_CONTROL_EVENT)((UINT)data);
+  void *param;
+
+  (void)TRACE_FUNCTION("handle_context_deactivate");
+
+  /* Go to state SM CONTEXT DEACTIVATING SEQUENCED */
+  context->context_control_state = SM_CONTEXT_DEACTIVATING_SEQUENCED;
+
+  /* Set cause to be sent to the network (if indicated by deactivation type) */
+  sm_set_nw_cause(context, CAUSE_is_from_nwsm,
+                  (U16)CAUSE_NWSM_REGULAR_DEACTIVATION);
+
+  switch (event)
+  {
+  case SM_I_DEACTIVATE_USER_PLANE:
+    param = (void *)PS_REL_IND_NO;
+    break;
+  case SM_I_DEACTIVATE_NETWORK_AND_USER_PLANE:
+  default:
+    event = SM_I_DEACTIVATE_NETWORK_AND_USER_PLANE;
+    /*lint -fallthrough*/
+  case SM_I_DEACTIVATE_NETWORK:
+    param = sm_get_nw_cause(context);
+    break;
+  }
+
+  /* Forward deactivation event to Context Deactivate Control */
+  sm_context_deactivate_control(context, event, param);
+}
+
+/*
++------------------------------------------------------------------------------
+| Function    : handle_local_deactivate
++------------------------------------------------------------------------------
+| Description : Handle event SM_I_CONTEXT_LOCAL_DEACTIVATE
+|
+| Parameters  : context          - Context data
+|               data             - UPM signalling switch
++------------------------------------------------------------------------------
+*/
+static void handle_local_deactivate(struct T_SM_CONTEXT_DATA *context, /*@null@*/ void *data)
+{
+  (void)TRACE_FUNCTION("handle_local_deactivate");
+
+  /* Go to state SM CONTEXT DEACTIVATED */
+  context->context_control_state = SM_CONTEXT_DEACTIVATED;
+
+  /* Locally deactivate Network Control */
+  sm_network_control(context, SM_I_NETWORK_DEACTIVATE_LOCAL, NULL);
+
+  /* Locally deactivate user plane (with UPM signalling) */
+  sm_user_plane_control(context, SM_I_USER_PLANE_DEACTIVATE_LOCAL, data);
+
+  /* Mark context for deallocation after call returns (unless context
+   * is pending reactivation) */
+  if (!sm_is_context_pending_reactivation(context)) {
+    sm_mark_context_for_deallocation(context);
+  }
+}
+
+/*==== PUBLIC FUNCTIONS =====================================================*/
+
+/*
++------------------------------------------------------------------------------
+| Function    : sm_context_control_init
++------------------------------------------------------------------------------
+| Description : Context Control state machine initialization function
+
+| Parameters  : context  - Context data
++------------------------------------------------------------------------------
+*/
+void sm_context_control_init(struct T_SM_CONTEXT_DATA *context)
+{
+  (void)TRACE_FUNCTION("sm_context_control_init");
+
+  sm_set_context_pending_reactivation(context, FALSE);
+  context->context_control_state = SM_CONTEXT_DEACTIVATED;
+}
+
+/*
++------------------------------------------------------------------------------
+| Function    : sm_context_control_exit
++------------------------------------------------------------------------------
+| Description : Context Control state machine exit function
+
+| Parameters  : context  - Context data
++------------------------------------------------------------------------------
+*/
+void sm_context_control_exit(struct T_SM_CONTEXT_DATA *context)
+{
+  (void)TRACE_FUNCTION("sm_context_control_exit");
+
+  sm_set_context_pending_reactivation(context, FALSE);
+  context->context_control_state = SM_CONTEXT_DEACTIVATED;
+}
+
+/*
++------------------------------------------------------------------------------
+| Function    : sm_context_control_state
++------------------------------------------------------------------------------
+| Description : Returns a read-only string with the name of the active state.
+
+| Parameters  : context  - Context data
++------------------------------------------------------------------------------
+*/
+#ifdef DEBUG
+/*@observer@*/const char *
+sm_context_control_state(struct T_SM_CONTEXT_DATA *context)
+{
+  /*@observer@*/
+  static const char *state_name[SM_CONTEXT_CONTROL_NUMBER_OF_STATES] = {
+    "S0_SM_CONTEXT_DEACTIVATED",
+    "S1_SM_CONTEXT_ACTIVATING_MT",
+    "S2_SM_CONTEXT_ACTIVATING_NETWORK",
+    "S3_SM_CONTEXT_ACTIVATING_USER_PLANE",
+    "S4_SM_CONTEXT_ACTIVATE_FAILED_DEACTIVATING",
+    "S5_SM_CONTEXT_ACTIVATED",
+    "S6_SM_CONTEXT_ACTIVATION_OVERRIDE",
+    "S7_SM_CONTEXT_MODIFYING_IN_NETWORK",
+    "S8_SM_CONTEXT_MODIFYING_USER_PLANE",
+    "S9_SM_CONTEXT_MODIFYING_USER_PLANE_MT",
+    "S10_SM_CONTEXT_UPGRADING_IN_NETWORK",
+    "S11_SM_CONTEXT_REACTIVATING_DEACTIVATING_USER_PLANE",
+    "S12_SM_CONTEXT_REACTIVATING_IN_NETWORK",
+    "S13_SM_CONTEXT_REACTIVATING_USER_PLANE",
+    "S14_SM_CONTEXT_DEACTIVATING",
+    "S15_SM_CONTEXT_DEACTIVATING_SEQUENCED"
+  };
+
+  TRACE_ASSERT(context->context_control_state < SM_CONTEXT_CONTROL_NUMBER_OF_STATES);
+
+  return state_name[(U16)context->context_control_state];
+}
+#endif
+/*
++------------------------------------------------------------------------------
+| Function    : sm_context_control
++------------------------------------------------------------------------------
+| Description : Context Control state machine
+|
+| Parameters  : context          - Context data
+|               event            - Internal event (see sm_context_control.h)
+|               data             - Event dependent parameter
++------------------------------------------------------------------------------
+*/
+void sm_context_control(struct T_SM_CONTEXT_DATA *context,
+                           T_SM_CONTEXT_CONTROL_EVENT event,
+                           /*@null@*/ void *data)
+{
+#ifdef DEBUG
+  const char *old_state_name, *new_state_name;
+  T_SM_CONTEXT_CONTROL_STATE old_state;
+  /*@observer@*/
+  static const char *event_name[SM_CONTEXT_CONTROL_NUMBER_OF_EVENTS] = {
+    "SM_P_SMREG_PDP_ACTIVATE_REQ",
+    "SM_P_SMREG_PDP_ACTIVATE_REJ_RES",
+    "SM_P_SMREG_PDP_ACTIVATE_SEC_REQ",
+    "SM_P_SMREG_PDP_MODIFY_REQ",
+    "SM_I_CONTEXT_DEACTIVATE",
+    "SM_I_CONTEXT_LOCAL_DEACTIVATE",
+    "SM_I_CONTEXT_REACTIVATE",
+    "SM_I_CONTEXT_UPGRADE",
+    "SM_I_CONTEXT_USER_PLANE_ERROR",
+    "SM_I_NETWORK_ACTIVATE_COMPLETED",
+    "SM_I_NETWORK_ACTIVATE_REJECTED",
+    "SM_I_NETWORK_DEACTIVATE_COMPLETED",
+    "SM_I_NETWORK_MODIFY_REJECTED",
+    "SM_I_NETWORK_MODIFY_COMPLETED",
+    "SM_I_NETWORK_REQUEST_ACTIVATION",
+    "SM_I_NETWORK_REQUEST_ACTIVATION_OVERRIDE",
+    "SM_I_NETWORK_REQUEST_DEACTIVATE",
+    "SM_I_NETWORK_REQUEST_MODIFY",
+    "SM_I_NETWORK_REQUEST_MODIFY_FAILED",
+    "SM_I_USER_PLANE_ACTIVATED",
+    "SM_I_USER_PLANE_DEACTIVATED",
+    "SM_I_USER_PLANE_MODIFIED",
+    "SM_I_DEACTIVATE_COMPLETED"
+  };
+
+  TRACE_ASSERT(event < SM_CONTEXT_CONTROL_NUMBER_OF_EVENTS);
+
+  old_state = context->context_control_state;
+  old_state_name = sm_context_control_state(context);
+
+  if (transition[(U16)old_state][(U16)event].event != event)
+  {
+    (void)TRACE_ERROR("Event table error in sm_context_control!");
+  }
+#endif /* DEBUG */
+
+  transition[(U16)context->context_control_state][(U16)event].func(context, data);
+
+#ifdef DEBUG
+  new_state_name = sm_context_control_state(context);
+
+  (void)TRACE_EVENT_P4("SM CONTEXT #%d: %s => %s to %s", context->nsapi,
+                       event_name[(U16)event], old_state_name, new_state_name);
+#endif /* DEBUG */
+}
+
+/*==== END OF FILE ==========================================================*/