diff g23m-aci/aci/psa_smp.c @ 0:75a11d740a02

initial import of gsm-fw from freecalypso-sw rev 1033:5ab737ac3ad7
author Mychaela Falconia <falcon@freecalypso.org>
date Thu, 09 Jun 2016 00:02:41 +0000
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/g23m-aci/aci/psa_smp.c	Thu Jun 09 00:02:41 2016 +0000
@@ -0,0 +1,489 @@
+/*
++-----------------------------------------------------------------------------
+|  Project :
+|  Modul   :
++-----------------------------------------------------------------------------
+|  Copyright 2002 Texas Instruments Berlin, AG
+|                 All rights reserved.
+|
+|                 This file is confidential and a trade secret of Texas
+|                 Instruments Berlin, AG
+|                 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 Berlin, AG.
++-----------------------------------------------------------------------------
+|  Purpose :  This module defines the processing functions for the
+|             primitives send to the protocol stack adapter by the
+|             session management of GPRS ( SM ).
++-----------------------------------------------------------------------------
+*/
+
+#ifdef GPRS
+
+#ifndef PSA_SMP_C
+#define PSA_SMP_C
+#endif
+
+#include "aci_all.h"
+/*==== INCLUDES ===================================================*/
+#include "dti.h"      /* functionality of the dti library */
+#include "aci_cmh.h"
+#include "ati_cmd.h"
+#include "aci_cmd.h"
+
+#include "aci.h"
+
+#include "dti_conn_mng.h"
+#include "dti_cntrl_mng.h"
+
+#include "gaci.h"
+#include "gaci_cmh.h"
+#include "psa.h"
+#include "psa_sm.h"
+
+#include "cmh.h"
+#include "cmh_sm.h"
+
+#if defined (FF_WAP) || defined (FF_GPF_TCPIP) || defined (FF_SAT_E)
+#include "psa_tcpip.h"
+#include "wap_aci.h"
+#endif /* defined (FF_WAP) || defined (FF_GPF_TCPIP) */
+
+#ifdef FF_GPF_TCPIP
+#include "dcm_utils.h"
+#include "dcm_state.h"
+#include "dcm_env.h"
+#endif
+#include "dcm_f.h"
+
+
+
+/*==== CONSTANTS ==================================================*/
+
+
+/*==== TYPES ======================================================*/
+
+
+/*==== EXPORT =====================================================*/
+
+
+/*==== VARIABLES ==================================================*/
+
+
+/*==== FUNCTIONS ==================================================*/
+
+/*
++----------------------------------------------------------------------+
+| PROJECT : GPRS (8441)           MODULE  : PSA_SM                     |
+| STATE   : finished              ROUTINE : psa_smreg_pdp_activate_cnf |
++----------------------------------------------------------------------+
+
+  PURPOSE : processes the SMREG_PDP_ACTIVATE_CNF primitive send by SM.
+            this confirms a successful context activation.
+*/
+GLOBAL void psa_smreg_pdp_activate_cnf ( T_SMREG_PDP_ACTIVATE_CNF *smreg_pdp_activate_cnf )
+{
+
+  T_PDP_CONTEXT_INTERNAL *p_pdp_context_node = NULL;
+
+  TRACE_FUNCTION ("psa_smreg_pdp_activate_cnf()");
+
+  p_pdp_context_node = pdp_context_find_node_from_cid( work_cids[cid_pointer] );
+  if( ! p_pdp_context_node )
+  {
+    TRACE_ERROR( "ERROR: PDP context not found, in function psa_smreg_pdp_activate_cnf" );
+    return;
+  }
+
+/*
+ *-------------------------------------------------------------------
+ * notify ACI
+ *-------------------------------------------------------------------
+ */
+
+  smShrdPrm.pdp_cnf = smreg_pdp_activate_cnf;
+
+  /*
+   * Store negotiated QOS parameters, only used for read out
+   */
+  p_pdp_context_node->ctrl_neg_qos = smreg_pdp_activate_cnf->ctrl_qos;
+  memcpy( &p_pdp_context_node->neg_qos, &smreg_pdp_activate_cnf->qos, sizeof(T_PS_qos) );
+
+  if ( cmhSM_Activated(smreg_pdp_activate_cnf) < 0)
+  {
+    TRACE_EVENT("cmhSM_Activated( ) returned error.");
+  }
+
+  /* free the primitive buffer */
+  PFREE (smreg_pdp_activate_cnf);
+}
+
+
+
+/*
++----------------------------------------------------------------------+
+| PROJECT : GPRS (8441)           MODULE  : PSA_SM                     |
+| STATE   : finished              ROUTINE : psa_smreg_pdp_activate_rej |
++----------------------------------------------------------------------+
+
+  PURPOSE : processes the SMREG_PDP_ACTIVATE_REJ primitive send by SM.
+            this indicates a context activation failed.
+*/
+GLOBAL void psa_smreg_pdp_activate_rej ( T_SMREG_PDP_ACTIVATE_REJ *smreg_pdp_activate_rej )
+{
+
+  TRACE_FUNCTION ("psa_smreg_pdp_activate_rej()");
+
+  /* update shared parameter and notify ACI */
+  smShrdPrm.pdp_rej = smreg_pdp_activate_rej;
+
+  if ( cmhSM_NoActivate( ) < 0)
+  {
+    TRACE_EVENT("cmhSM_NoActivate( ) returned error.");
+  }
+
+#ifdef FF_GPF_TCPIP
+  if(is_gpf_tcpip_call())
+  {
+    T_DCM_STATUS_IND_MSG msg;
+    msg.hdr.msg_id = DCM_NEXT_CMD_STOP_MSG;
+    dcm_send_message(msg, DCM_SUB_WAIT_CGACT_CNF);
+  }
+#endif /* FF_GPF_TCPIP */
+
+  /* free the primitive buffer */
+  PFREE (smreg_pdp_activate_rej);
+}
+
+/*
++----------------------------------------------------------------------+
+| PROJECT : GPRS (8441)           MODULE  : PSA_SM                     |
+| STATE   : developing            ROUTINE : convert_apn_to_netaddr     |
++----------------------------------------------------------------------+
+
+  PURPOSE : converts an APN to a dotted network address
+
+*/
+LOCAL SHORT convert_apn_to_netaddr ( T_SMREG_apn *apn_src, T_SMREG_apn *apn_dest)
+{
+
+  T_SMREG_apn dummy_apn = {0,0,0};
+  U8 counter1 = 0;
+  U8 counter2 = 0;
+  U8 dest_pos = 0;
+  U8 bytecount = 0;
+
+  TRACE_FUNCTION ("convert_apn_to_netaddr()");
+
+  if(apn_src EQ apn_dest)
+  {
+    apn_dest=&dummy_apn;
+  }
+
+  while(counter1<apn_src->c_apn_buf-1)
+  {
+    bytecount=apn_src->apn_buf[counter1];
+    for(counter2=0;counter2<bytecount;counter2++)
+    {
+      counter1++;
+      if (counter1>=apn_src->c_apn_buf)
+      {
+        return -1;
+      }
+      else
+      {
+        apn_dest->apn_buf[dest_pos]=apn_src->apn_buf[counter1];
+          dest_pos++;
+      }
+    }
+    if (counter1<apn_src->c_apn_buf-1)
+    {
+      apn_dest->apn_buf[dest_pos]='.';
+        dest_pos++;
+        counter1++;
+    }
+    else
+    {
+      apn_dest->apn_buf[dest_pos]=0;
+    }
+  }
+  if (apn_dest EQ &dummy_apn)
+  {
+    apn_dest=apn_src;
+      memcpy(apn_dest->apn_buf,&dummy_apn.apn_buf,dest_pos+1);
+      apn_dest->c_apn_buf=dest_pos;
+  }
+  return 0;
+}
+
+/*
++----------------------------------------------------------------------+
+| PROJECT : GPRS (8441)           MODULE  : PSA_SM                     |
+| STATE   : finished              ROUTINE : psa_smreg_pdp_activate_ind |
++----------------------------------------------------------------------+
+
+  PURPOSE : processes the SMREG_PDP_ACTIVATE_IND primitive send by SM.
+            this indicates a network asked for a PDP context activation.
+*/
+GLOBAL void psa_smreg_pdp_activate_ind ( T_SMREG_PDP_ACTIVATE_IND *smreg_pdp_activate_ind )
+{
+
+  TRACE_FUNCTION ("psa_smreg_pdp_activate_ind()");
+
+  /* update shared parameter and notify ACI */
+  memcpy(&smShrdPrm.act_ind, smreg_pdp_activate_ind, sizeof(T_SMREG_PDP_ACTIVATE_IND));
+
+  convert_apn_to_netaddr(&smShrdPrm.act_ind.apn,&smShrdPrm.act_ind.apn);
+
+  cmhSM_NetActivate( );
+
+  /* free the primitive buffer */
+  PFREE (smreg_pdp_activate_ind);
+}
+
+/*
++------------------------------------------------------------------------+
+| PROJECT : GPRS (8441)           MODULE  : PSA_SM                       |
+| STATE   : finished              ROUTINE : psa_smreg_pdp_deactivate_cnf |
++------------------------------------------------------------------------+
+
+  PURPOSE : processes the SMREG_PDP_DEACTIVATE_CNF primitive send by SM.
+            this confirms a successful PDP context deactivation.
+*/
+GLOBAL void psa_smreg_pdp_deactivate_cnf
+                  ( T_SMREG_PDP_DEACTIVATE_CNF *smreg_pdp_deactivate_cnf )
+{
+
+  TRACE_FUNCTION ("psa_smreg_pdp_deactivate_cnf()");
+
+  /* update shared parameter and notify ACI */
+  smShrdPrm.nsapi_set = smreg_pdp_deactivate_cnf->nsapi_set;
+
+  cmhSM_Deactivated();
+
+  /* free the primitive buffer */
+  PFREE (smreg_pdp_deactivate_cnf);
+}
+
+/*
++------------------------------------------------------------------------+
+| PROJECT : GPRS (8441)           MODULE  : PSA_SM                       |
+| STATE   : finished              ROUTINE : psa_smreg_pdp_deactivate_ind |
++------------------------------------------------------------------------+
+
+  PURPOSE : processes the SMREG_PDP_DEACTIVATE_IND primitive send by SM.
+            this indicates a network initiated PDP context deactivation.
+*/
+GLOBAL void psa_smreg_pdp_deactivate_ind
+                  ( T_SMREG_PDP_DEACTIVATE_IND *smreg_pdp_deactivate_ind )
+{
+
+  TRACE_FUNCTION ("psa_smreg_pdp_deactivate_ind()");
+
+  /* update shared parameter and notify ACI */
+  smShrdPrm.nsapi_set = smreg_pdp_deactivate_ind->nsapi_set;
+
+  cmhSM_NetDeactivate( );
+
+  /* free the primitive buffer */
+  PFREE (smreg_pdp_deactivate_ind);
+}
+
+/*
++--------------------------------------------------------------------+
+| PROJECT : GPRS (8441)           MODULE  : PSA_SM                   |
+| STATE   : finished              ROUTINE : psa_smreg_pdp_modify_ind |
++--------------------------------------------------------------------+
+
+  PURPOSE : processes the SMREG_PDP_MODIFY_IND primitive send by SM.
+            this indicates a network initiated PDP context modification.
+*/
+GLOBAL void psa_smreg_pdp_modify_ind
+                  ( T_SMREG_PDP_MODIFY_IND *smreg_pdp_modify_ind )
+{
+
+  TRACE_FUNCTION ("psa_smreg_pdp_modify_ind()");
+
+/*
+ *-------------------------------------------------------------------
+ * informs context manager
+ *-------------------------------------------------------------------
+ */
+
+  cmhSM_NetModify(smreg_pdp_modify_ind);
+
+/*
+ *-------------------------------------------------------------------
+ * free the primitive buffer
+ *-------------------------------------------------------------------
+ */
+  PFREE (smreg_pdp_modify_ind);
+}
+
+
+
+/*
++----------------------------------------------------------------------+
+| PROJECT : GPRS (8441)           MODULE  : PSA_SM                     |
+| STATE   : finished              ROUTINE : psa_smreg_pdp_modify_cnf   |
++----------------------------------------------------------------------+
+
+  PURPOSE : processes the SMREG_PDP_MODIFY_CNF primitive send by SM.
+            this confirms a successful context modification.
+*/
+#ifdef REL99
+GLOBAL void psa_smreg_pdp_modify_cnf ( T_SMREG_PDP_MODIFY_CNF *smreg_pdp_modify_cnf )
+{
+  T_PDP_CONTEXT_INTERNAL *p_pdp_context_node = NULL;
+
+  TRACE_FUNCTION ("psa_smreg_pdp_modify_cnf()");
+
+  p_pdp_context_node = pdp_context_find_node_from_cid( work_cids[cid_pointer] );
+  if( !p_pdp_context_node )
+  {
+    TRACE_ERROR( "ERROR: PDP context not found, in function psa_smreg_pdp_modify_cnf" );
+    return;
+  }
+
+/*
+ *-------------------------------------------------------------------
+ * update shared parameter with new QoS and notify ACI
+ *-------------------------------------------------------------------
+ */
+  if( smreg_pdp_modify_cnf->ctrl_qos NEQ PS_is_qos_not_present )
+  {
+    p_pdp_context_node->ctrl_neg_qos = smreg_pdp_modify_cnf->ctrl_qos;
+    memcpy( &p_pdp_context_node->neg_qos, &smreg_pdp_modify_cnf->qos, sizeof(T_PS_qos) );
+  }
+
+
+  
+  if( cmhSM_Modified( smreg_pdp_modify_cnf) > 0 )
+  {
+    TRACE_EVENT("cmhSM( SM_NTF_MOD_CNF ): not supported return value.");
+  }  
+/*
+ *-------------------------------------------------------------------
+ * free the primitive buffer
+ *-------------------------------------------------------------------
+ */
+  PFREE (smreg_pdp_modify_cnf);
+
+}
+
+
+/*
++----------------------------------------------------------------------+
+| PROJECT : GPRS (8441)           MODULE  : PSA_SM                     |
+| STATE   : finished              ROUTINE : psa_smreg_pdp_modify_rej   |
++----------------------------------------------------------------------+
+
+  PURPOSE : processes the SMREG_PDP_MODIFY_REJ primitive send by SM.
+            this indicates a context modification failed.
+*/
+
+GLOBAL  void psa_smreg_pdp_modify_rej ( T_SMREG_PDP_MODIFY_REJ *smreg_pdp_modify_rej )
+{
+
+  TRACE_FUNCTION ("psa_smreg_pdp_modify_rej()");
+
+/*
+ *-------------------------------------------------------------------
+ * notify ACI
+ *-------------------------------------------------------------------
+ */
+  if( cmhSM_NoModify( smreg_pdp_modify_rej ) < 0 )
+  {
+    TRACE_EVENT("cmhSM( SM_NTF_MOD_REJ ) give not supported return value.");
+  }
+/*
+ *-------------------------------------------------------------------
+ * free the primitive buffer
+ *-------------------------------------------------------------------
+ */
+  PFREE (smreg_pdp_modify_rej);
+}
+
+/*
++----------------------------------------------------------------------------+
+| PROJECT : UMTS                  MODULE  : PSA_SM                           |
+| STATE   :                       ROUTINE : psa_smreg_pdp_activate_sec_cnf   |
++----------------------------------------------------------------------------+
+
+  PURPOSE : processes the SMREG_PDP_ACTIVATE_SEC_CNF primitive send by SM.
+*/
+GLOBAL  void psa_smreg_pdp_activate_sec_cnf( T_SMREG_PDP_ACTIVATE_SEC_CNF *smreg_pdp_activate_sec_cnf )
+{
+  T_PDP_CONTEXT_INTERNAL *p_pdp_context_node = NULL;
+
+  TRACE_FUNCTION ("psa_smreg_pdp_activate_sec_cnf()");
+
+  p_pdp_context_node = pdp_context_find_node_from_cid( work_cids[cid_pointer] );
+  if( !p_pdp_context_node )
+  {
+    TRACE_ERROR( "ERROR: PDP context not found, in function psa_smreg_pdp_activate_sec_cnf" );
+    return;
+  }
+
+/*
+ *-------------------------------------------------------------------
+ * update shared parameter with new QoS and notify ACI
+ *-------------------------------------------------------------------
+ */
+  p_pdp_context_node->ctrl_neg_qos = smreg_pdp_activate_sec_cnf->ctrl_qos;
+  memcpy( &p_pdp_context_node->neg_qos, &smreg_pdp_activate_sec_cnf->qos, sizeof(T_PS_qos) );
+
+
+/*
+ *-------------------------------------------------------------------
+ * notify ACI
+ *-------------------------------------------------------------------
+ */
+  if( cmhSM_ActivatedSecondary( smreg_pdp_activate_sec_cnf ) < 0 )
+  {
+    TRACE_EVENT("cmhSM( SM_NTF_ACT_SEC_CNF ) un-supported return value.");
+  }
+/*
+ *-------------------------------------------------------------------
+ * free the primitive buffer
+ *-------------------------------------------------------------------
+ */
+  PFREE( smreg_pdp_activate_sec_cnf );
+}
+
+
+/*
++----------------------------------------------------------------------------+
+| PROJECT : UMTS                  MODULE  : PSA_SM                           |
+| STATE   :                       ROUTINE : psa_smreg_pdp_activate_sec_rej   |
++----------------------------------------------------------------------------+
+
+  PURPOSE : processes the SMREG_PDP_ACTIVATE_SEC_REJ primitive send by SM.
+*/
+GLOBAL void psa_smreg_pdp_activate_sec_rej( T_SMREG_PDP_ACTIVATE_SEC_REJ *smreg_pdp_activate_sec_rej )
+{
+
+  TRACE_FUNCTION ("psa_smreg_pdp_activate_sec_rej()");
+
+/*
+ *-------------------------------------------------------------------
+ * notify ACI
+ *-------------------------------------------------------------------
+ */
+  if( cmhSM_NoActivateSecondary( smreg_pdp_activate_sec_rej ) < 0 )
+  {
+    TRACE_EVENT("cmhSM( SM_NTF_ACT_SEC_REJ ) un-supported return value.");
+  }
+/*
+ *-------------------------------------------------------------------
+ * free the primitive buffer
+ *-------------------------------------------------------------------
+ */
+  PFREE( smreg_pdp_activate_sec_rej );
+}
+#endif /* REL99 */
+
+#endif  /* GPRS */
+/*==== EOF =========================================================*/