diff g23m-aci/aci/cmh_gpppr.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/cmh_gpppr.c	Thu Jun 09 00:02:41 2016 +0000
@@ -0,0 +1,499 @@
+/* 
++----------------------------------------------------------------------------- 
+|  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 functions which are responsible
+|             for the responses of the protocol stack adapter for
+|             GPRS Point-to-Point Protocol ( PPP ).
++----------------------------------------------------------------------------- 
+*/ 
+
+#if defined (GPRS) && defined (DTI)
+
+#ifndef CMH_GPPPR_C
+#define CMH_GPPPR_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 "dti_conn_mng.h"
+#include "dti_cntrl_mng.h"
+
+#include "aci.h"
+#include "gaci.h"
+#include "gaci_cmh.h"
+#include "psa.h"
+#include "psa_gppp.h"
+#include "psa_sm.h"
+#include "psa_uart.h"
+
+#include "psa_aaa.h"
+
+#include "cmh.h"
+#include "cmh_gppp.h"
+#include "cmh_sm.h"
+
+#include "sap_dti.h"
+
+/*==== CONSTANTS ==================================================*/
+
+
+/*==== TYPES ======================================================*/
+
+
+/*==== EXPORT =====================================================*/
+
+
+/*==== VARIABLES ==================================================*/
+
+/*==== FUNCTIONS ==================================================*/
+
+/*
++-------------------------------------------------------------------+
+| PROJECT : GPRS (8441)      MODULE  : CMH_PPPR                     |
+| STATE   : finnished        ROUTINE : cmhGPPP_Established           |
++-------------------------------------------------------------------+
+
+  PURPOSE : establish a PPP link was successful
+
+*/
+GLOBAL SHORT cmhGPPP_Established ( void )
+{
+
+  T_PDP_CONTEXT_INTERNAL *p_pdp_context_node = NULL;
+
+  TRACE_FUNCTION ("cmhGPPP_Established()");
+
+  p_pdp_context_node = pdp_context_find_node_from_cid( work_cids[cid_pointer] );
+  
+  if( p_pdp_context_node )
+  {
+    switch( gpppEntStat.curCmd )
+    {
+      case( AT_CMD_CGDATA ):
+        /* no action, because the PDP context will be terminated */
+        if( get_state_working_cid() NEQ PDP_CONTEXT_STATE_ESTABLISH_3 )
+        {
+          return 0;
+        }
+        else
+        {
+          set_state_working_cid( PDP_CONTEXT_STATE_DATA_LINK );
+        /*
+         *  do we need one more context activation
+         */
+          if( cmhSM_next_work_cid( AT_CMD_CGDATA ) EQ FALSE )
+          {
+            /* todo for new DTI interface - SMNEW done 06032001... */
+            R_AT( RAT_CGDATA, gpppEntStat.entOwn )( p_pdp_context_node->internal_data.link_id ); /* UACI */
+            /* PHE 201201 gpppEntStat.curCmd = AT_CMD_NONE; */
+          }
+        }
+               
+      cmhSM_next_call_table_entry();
+      break;
+    }
+  }
+  else
+  {
+    TRACE_ERROR( "ERROR: PDP context not found, in function cmhGPPP_Established" );
+  }
+  return 0;
+}
+
+
+/*
++-------------------------------------------------------------------+
+| PROJECT : GPRS (8441)      MODULE  : CMH_PPPR                     |
+| STATE   : code             ROUTINE : cmhGPPP_Terminated           |
++-------------------------------------------------------------------+
+
+  PURPOSE : PPP connection is closed
+
+*/
+GLOBAL SHORT cmhGPPP_Terminated ( void )
+{
+  T_ACI_CMD_SRC     rat_owner;
+  UBYTE               cmdBuf  = gpppEntStat.curCmd, /* buffers current command */
+  cme_err = CME_ERR_Unknown;   /* error number */
+  U8      cid = PDP_CONTEXT_CID_INVALID;
+  SHORT   reactivation = 0,
+          rat_id = RAT_MAX;
+  USHORT  nsapi_set = 0;
+  T_PDP_CONTEXT_INTERNAL *p_pdp_context_node = NULL;
+#ifdef FF_TCP_IP
+  T_DTI_ENTITY_ID peer;
+#endif
+  UBYTE srcId = srcId_cb;
+
+  TRACE_FUNCTION ("cmhGPPP_Terminated()");
+
+  cid = gaci_get_cid_over_link_id(gaci_get_link_id_over_peer(DTI_ENTITY_PPPS));
+
+  p_pdp_context_node = pdp_context_find_node_from_cid( cid );
+
+#ifdef FF_TCP_IP
+  peer = dti_cntrl_get_peer(DTI_ENTITY_PPPS, 0, 0);
+  if ( peer EQ DTI_ENTITY_AAA )
+  {
+    psaAAA_disconnect_ind (p_pdp_context_node->internal_data.link_id_uart);
+  }
+#endif
+
+  if( p_pdp_context_node )
+  {
+    cid = p_pdp_context_node->cid;
+
+    /*
+     *-------------------------------------------------------------------
+     * Inform the DTI Manager about the link termination.
+     *-------------------------------------------------------------------
+     */
+    dti_cntrl_entity_disconnected( p_pdp_context_node->internal_data.link_id , DTI_ENTITY_PPPS );
+    dti_cntrl_entity_disconnected( p_pdp_context_node->internal_data.link_id_uart, DTI_ENTITY_PPPS );
+
+  switch ( get_state_over_cid( cid ) )
+  {
+      case PDP_CONTEXT_STATE_INVALID:
+      case PDP_CONTEXT_STATE_DEFINED:
+      case PDP_CONTEXT_STATE_ATTACHING:
+      case PDP_CONTEXT_STATE_ACTIVATING:
+      case PDP_CONTEXT_STATE_ACTIVATED:
+      case PDP_CONTEXT_STATE_DEACTIVATE_NORMAL:
+        TRACE_ERROR( "cmhGPPP_Terminated(): State/Event error!!!" );
+        break;
+        
+      case PDP_CONTEXT_STATE_ESTABLISH_2:
+      case PDP_CONTEXT_STATE_ESTABLISH_3:
+      case PDP_CONTEXT_STATE_ACTIVATED_ESTABLISH_1:
+        set_state_over_cid( cid, PDP_CONTEXT_STATE_ABORT_ESTABLISH );
+        nsapi_set  = cmhSM_Give_nsapi_set( cid );
+        dti_cntrl_set_dti_id_to_reconnect(EXTRACT_DTI_ID(p_pdp_context_node->internal_data.link_id));
+        break;
+        
+      case PDP_CONTEXT_STATE_ESTABLISH_1:
+        cmhSM_contextDeactivated();
+
+      /*lint -fallthrough*/
+      case PDP_CONTEXT_STATE_ABORT_ESTABLISH:
+        set_state_over_cid( cid, PDP_CONTEXT_STATE_DEFINED );
+        /* Close the data path since this can not be done from CMH_SM (no activating/activated context) */
+        dti_cntrl_close_dpath_from_dti_id( EXTRACT_DTI_ID(p_pdp_context_node->internal_data.link_id) );
+
+        dti_cntrl_set_dti_id_to_reconnect(EXTRACT_DTI_ID(p_pdp_context_node->internal_data.link_id));
+        if(ati_user_output_cfg[srcId].CMEE_stat EQ CMEE_MOD_Disable OR isContextDeactivationRequestedByCGACT(cid))
+          rat_id = RAT_NO_CARRIER;
+        else
+          rat_id = RAT_CME;
+        break;
+        
+      case PDP_CONTEXT_STATE_BREAKDOWN_LINK_NORMAL:
+        set_state_over_cid( cid, PDP_CONTEXT_STATE_DEFINED );
+        dti_cntrl_set_dti_id_to_reconnect(EXTRACT_DTI_ID(p_pdp_context_node->internal_data.link_id));
+        rat_id = RAT_NO_CARRIER;
+        break;
+        
+      case PDP_CONTEXT_STATE_DATA_LINK:
+        set_state_over_cid( cid, PDP_CONTEXT_STATE_BREAKDOWN_LINK_NORMAL );
+        nsapi_set  = cmhSM_Give_nsapi_set( cid );
+        dti_cntrl_set_dti_id_to_reconnect(EXTRACT_DTI_ID(p_pdp_context_node->internal_data.link_id));
+        break;
+        
+      case PDP_CONTEXT_STATE_REACTIVATION_1:
+        set_state_over_cid( cid, PDP_CONTEXT_STATE_REACTIVATION_2 );
+        dti_cntrl_set_dti_id_to_reconnect(EXTRACT_DTI_ID(p_pdp_context_node->internal_data.link_id));
+        gpppEntStat.curCmd = AT_CMD_NONE;
+        /* 28592 cmhSM_connection_down(EXTRACT_DTI_ID(p_pdp_context_node->internal_data.link_id)); */
+        return 0;
+               
+      case PDP_CONTEXT_STATE_REACTIVATION_2:
+        set_state_over_cid( cid, PDP_CONTEXT_STATE_DEFINED );
+        dti_cntrl_set_dti_id_to_reconnect(EXTRACT_DTI_ID(p_pdp_context_node->internal_data.link_id));
+        gpppEntStat.curCmd = AT_CMD_NONE;
+        rat_id = RAT_NO_CARRIER;
+        reactivation = 1;
+        cmhSM_connection_down(EXTRACT_DTI_ID(p_pdp_context_node->internal_data.link_id)); /* 28592 */
+        break;
+
+    } /* end switch */
+   
+  }
+  else
+  {
+    TRACE_ERROR( "ERROR: PDP context not found, in function cmhGPPP_Terminated" );
+    return 0;
+  }
+
+  rat_owner = (T_ACI_CMD_SRC)get_owner_over_cid( cid );
+
+  if ( reactivation EQ 0 )
+  {
+    /* Do we need a SMREG_PDP_DEACTIVATE_REQ? */
+    if ( nsapi_set )
+    {
+      psaSM_PDP_Deactivate ( nsapi_set, PS_REL_IND_NO );
+    }
+  /*
+   *-------------------------------------------------------------------
+   * check for command context
+   *-------------------------------------------------------------------
+   */
+    switch( gpppEntStat.curCmd )
+    {
+      case( AT_CMD_CGDATA ):
+        if ( rat_owner EQ gpppEntStat.entOwn )
+        {
+          gpppEntStat.curCmd = AT_CMD_NONE;
+        }
+        /* brz: to check */
+        switch(gpppShrdPrm.ppp_cause)
+        {
+          case PPP_TERM_OK_PEER:
+          case PPP_TERM_NO_RESPONSE:
+          case PPP_TERM_LOOP_BACK:
+          case PPP_TERM_LCP_NOT_CONVERGE:
+          case PPP_TERM_IPCP_NOT_CONVERGE:
+          case PPP_TERM_IPCP_NOT_STARTED:
+            cme_err = CME_ERR_GPRSBadModClass;
+            break;
+          /* The below cause values is commented as it is not defined in the 
+           * Alborg SAP Document, and because of this it is giving compilation
+           * ERROR
+           */
+          /*case SMREG_RC_USE_AUTHED_FAILED:*/ 
+          case PPP_TERM_USE_AUTHED_FAILED:
+            cme_err = CME_ERR_GPRSPdpAuth;
+            break;
+          default:
+            cme_err = CME_ERR_Unknown;
+        }
+        break;
+#if 0
+      /*
+       * These cases do never happen!
+       */
+      case( AT_CMD_CGACT ):
+      case( AT_CMD_CGANS ):
+      case( AT_CMD_A ):
+      case( AT_CMD_H ):
+        break;
+#endif
+      default:
+        switch(gpppShrdPrm.ppp_cause)
+        {
+          case CAUSE_NWSM_SERVICE_NOT_SUPPORTED:
+            cme_err = CME_ERR_GPRSSerOptNsup;
+            break;
+          case CAUSE_NWSM_SERVICE_NOT_SUBSCRIBED:
+            cme_err = CME_ERR_GPRSSerOptNsub;
+            break;
+          case CAUSE_NWSM_SERVICE_TEMP_OUT_OF_ORDER:
+            cme_err = CME_ERR_GPRSSerOptOOO;
+            break;
+          case PPP_TERM_USE_AUTHED_FAILED:
+            cme_err = CME_ERR_GPRSPdpAuth;
+            break;
+          default:
+            cme_err = CME_ERR_Unknown;
+        }
+    }
+    if ( smEntStat.entOwn EQ rat_owner )
+    {
+        switch( smEntStat.curCmd )
+        {
+          case( AT_CMD_CGDATA ):
+          case( AT_CMD_CGACT ):
+            smEntStat.curCmd = AT_CMD_NONE;
+            break;
+        }
+    }
+  }
+
+  cmhSM_connection_down(EXTRACT_DTI_ID(p_pdp_context_node->internal_data.link_id));
+
+  if( rat_id NEQ RAT_MAX )
+  {
+    gaci_RAT_caller( rat_id, cid, cmdBuf, cme_err );
+      
+    if( reactivation EQ 0 )
+    {
+      work_cids[0] = PDP_CONTEXT_CID_INVALID;    
+    }
+
+    cmhSM_context_reactivation();
+    cmhSM_disconnect_cid(cid, GC_TYPE_DATA_LINK);
+  }
+
+  work_cids[0] = PDP_CONTEXT_CID_INVALID;
+  cid_pointer  = 0;
+  if ( smEntStat.curCmd EQ AT_CMD_CGACT )
+  {
+    smEntStat.curCmd = AT_CMD_NONE;
+  }
+  return 0;
+}
+
+/*
++-------------------------------------------------------------------+
+| PROJECT : GPRS (8441)      MODULE  : CMH_PPPR                     |
+| STATE   : finished         ROUTINE : cmhGPPP_Activated             |
++-------------------------------------------------------------------+
+
+  PURPOSE : activate the PDP context (only in server or transparent
+  mode) and if the context is already activated then answer PPP.
+  (PPP_ACTIVATE_IND is received).
+
+
+*/
+GLOBAL SHORT cmhGPPP_Activated ( void )
+{
+  U8 cid = work_cids[cid_pointer];
+  T_PDP_CONTEXT_INTERNAL *p_pdp_context_node = NULL;
+
+  TRACE_FUNCTION ("cmhGPPP_Activated()");
+
+  p_pdp_context_node = pdp_context_find_node_from_cid( cid );
+  if( !p_pdp_context_node )
+  {
+    TRACE_ERROR("ERROR: PDP context not found, in function cmhGPPP_Activated");
+    return -1;
+  }
+
+/*
+ *-------------------------------------------------------------------
+ * check for command context
+ *-------------------------------------------------------------------
+ */
+  switch( gpppEntStat.curCmd )
+  {
+    case( AT_CMD_CGANS ):
+    case( AT_CMD_CGDATA ):
+    /*
+     *---------------------------------------------------------------
+      * check entity context state
+     *---------------------------------------------------------------
+     */
+      switch ( get_state_working_cid() )
+      {
+        case PDP_CONTEXT_STATE_ESTABLISH_1:
+        {
+
+         /*
+          *---------------------------------------------------------------
+          * save parameter
+          *---------------------------------------------------------------
+          */
+  
+          /* Issue OMAPS00047332 : SNDCP, SM and UPM are not supporting ppp_hc and msid anymore */
+
+          smEntStat.curCmd   = gpppEntStat.curCmd;
+          smShrdPrm.owner    = gpppShrdPrm.owner;
+          smEntStat.entOwn   = (T_ACI_CMD_SRC)smShrdPrm.owner;
+
+         /*
+          *---------------------------------------------------------------
+          * store PCO information if it's provided PPP
+          *---------------------------------------------------------------
+          */
+
+          if( (gpppShrdPrm.pdp->sdu.l_buf >> 3) > 0 )
+          {
+            cmhSM_set_PCO(  cid, PCO_USER, 
+                  &gpppShrdPrm.pdp->sdu.buf[gpppShrdPrm.pdp->sdu.o_buf >> 3],
+                 (UBYTE) (gpppShrdPrm.pdp->sdu.l_buf >> 3));
+          }
+
+    /*
+     *---------------------------------------------------------------
+          * PPP has requested context activation: Activate the context.
+     *---------------------------------------------------------------
+     */
+          cmhSM_connect_context( cid, DTI_ENTITY_PPPS );
+      
+          set_state_working_cid( PDP_CONTEXT_STATE_ESTABLISH_2 );
+        }
+        break;
+
+        case PDP_CONTEXT_STATE_ACTIVATED_ESTABLISH_1:
+        {
+         /*
+          *---------------------------------------------------------------
+          * save parameter
+          *---------------------------------------------------------------
+          */
+          
+          /* Issue OMAPS00047332 : SNDCP, SM and UPM are not supporting ppp_hc and msid anymore
+             So do not send ppp_hc and msid params to ppp
+           */
+          smEntStat.curCmd   = gpppEntStat.curCmd;
+          smShrdPrm.owner    = gpppShrdPrm.owner;
+          smEntStat.entOwn   = (T_ACI_CMD_SRC)smShrdPrm.owner;
+
+         /*
+          *---------------------------------------------------------------
+          * PPP has requested context activation, but the context is 
+          * already activated: Answer PPP.
+          *---------------------------------------------------------------
+          */
+          psaGPPP_PDP_Activate( &p_pdp_context_node->internal_data.pdp_address_allocated,
+                                p_pdp_context_node->internal_data.network_pco.pco, 
+                                (UBYTE) (p_pdp_context_node->internal_data.network_pco.len),
+                                (UBYTE) CID_TO_NSAPI(cid));
+
+          set_state_working_cid( PDP_CONTEXT_STATE_ESTABLISH_3 );
+        }
+          break;
+        default:
+          /* The PPP_PDP_ACTIVATE_IND might have crossed with a PPP_TERMINATE_REQ.
+             Ignore the event by returning */
+          return 0;
+      }
+
+  }
+
+  return 0;
+}
+
+/*
++-------------------------------------------------------------------+
+| PROJECT : GPRS (8441)      MODULE  : CMH_PPPR                     |
+| STATE   : finished         ROUTINE : cmhGPPP_Modified             |
++-------------------------------------------------------------------+
+
+  PURPOSE : new negotiate header compression confirmed (only in server mode)
+
+*/
+GLOBAL SHORT cmhGPPP_Modified ( void )
+{
+  TRACE_FUNCTION ("cmhGPPP_Modified()");
+
+/*
+ *---------------------------------------------------------------
+ * nothing to do
+ *---------------------------------------------------------------
+ */
+
+  return 0;
+}
+
+#endif /* GPRS */
+/*==== EOF ========================================================*/
+