diff src/g23m-fad/ppp/ppp_pei.c @ 1:fa8dc04885d8

src/g23m-*: import from Magnetite
author Mychaela Falconia <falcon@freecalypso.org>
date Fri, 16 Oct 2020 06:25:50 +0000
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/g23m-fad/ppp/ppp_pei.c	Fri Oct 16 06:25:50 2020 +0000
@@ -0,0 +1,1176 @@
+/* 
++----------------------------------------------------------------------------- 
+|  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 implements the process body interface
+|             for the entity Point-to-Point Protocol (PPP)
+|             
+|             Exported functions:
+|             
+|             pei_create    - Create the Protocol Stack Entity
+|             pei_init      - Initialize Protocol Stack Entity
+|             pei_primitive - Process Primitive
+|             pei_timeout   - Process Timeout
+|             pei_exit      - Close resources and terminate
+|             pei_run       - Process Primitive
+|             pei_config    - Dynamic Configuration
+|             pei_monitor   - Monitoring of physical Parameters
++----------------------------------------------------------------------------- 
+*/ 
+
+#define PPP_PEI_C
+
+#define ENTITY_PPP
+
+/*==== INCLUDES =============================================================*/
+
+#include <stddef.h>
+#include "typedefs.h"   /* to get Condat data types */
+#include "vsi.h"        /* to get a lot of macros */
+/*lint -efile(766,macdef.h) */
+#include "macdef.h"     /* to get a lot of macros */
+#include "custom.h"     /* to get a lot of macros */
+#include "gsm.h"        /* to get a lot of macros */
+/*lint -efile(766,cnf_ppp.h) */
+#include "cnf_ppp.h"    /* to get cnf-definitions */
+#include "mon_ppp.h"    /* to get mon-definitions */
+#include "prim.h"       /* to get the definitions of used SAP and directions */
+#include "dti.h"        /* to get the DTILIB definitions */
+#include "ppp.h"        /* to get the global entity definitions */
+
+#ifdef FF_STATUS_TE
+#include "gdi.h"        /* To include driver type-defines */
+#include "ste.h"        /* To include function interface for TE status driver */
+#endif /* FF_STATUS_TE */
+
+#include "ppp_rtf.h"     /* to get rt functions */
+#include "ppp_rtp.h"     /* to get rt primitives */
+#include "ppp_rts.h"     /* to get rt signals */
+
+/*lint -efile(766,ppp_prxp.h) */
+#include "ppp_prxf.h"     /* to get prx functions */
+#include "ppp_prxp.h"     /* to get prx primitives */
+#include "ppp_prxs.h"     /* to get prx signals */
+
+/*lint -efile(766,ppp_ptxp.h) */
+#include "ppp_ptxf.h"     /* to get ptx functions */
+#include "ppp_ptxp.h"     /* to get ptx primitives */
+#include "ppp_ptxs.h"     /* to get ptx signals */
+
+/*lint -efile(766,ppp_frxp.h) */
+#include "ppp_frxf.h"     /* to get frx functions */
+#include "ppp_frxp.h"     /* to get frx primitives */
+#include "ppp_frxs.h"     /* to get frx signals */
+
+/*lint -efile(766,ppp_ftxp.h) */
+#include "ppp_ftxf.h"     /* to get ftx functions */
+#include "ppp_ftxp.h"     /* to get ftx primitives */
+#include "ppp_ftxs.h"     /* to get ftx signals */
+
+#include "ppp_arbf.h"     /* to get arb functions */
+#include "ppp_arbp.h"     /* to get arb primitives */
+#include "ppp_arbs.h"     /* to get arb signals */
+
+/*lint -efile(766,ppp_lcpp.h) */
+/*lint -efile(766,ppp_lcps.h) */
+#include "ppp_lcpf.h"     /* to get lcp functions */
+#include "ppp_lcpp.h"     /* to get lcp primitives */
+#include "ppp_lcps.h"     /* to get lcp signals */
+
+/*lint -efile(766,ppp_onap.h) */
+/*lint -efile(766,ppp_onas.h) */
+#include "ppp_onaf.h"     /* to get ona functions */
+#include "ppp_onap.h"     /* to get ona primitives */
+#include "ppp_onas.h"     /* to get ona signals */
+
+/*lint -efile(766,ppp_ncpp.h) */
+/*lint -efile(766,ppp_ncps.h) */
+#include "ppp_ncpf.h"     /* to get ncp functions */
+#include "ppp_ncpp.h"     /* to get ncp primitives */
+#include "ppp_ncps.h"     /* to get ncp signals */
+
+/*lint -efile(766,ppp_papp.h) */
+/*lint -efile(766,ppp_paps.h) */
+#include "ppp_papf.h"     /* to get pap functions */
+#include "ppp_papp.h"     /* to get pap primitives */
+#include "ppp_paps.h"     /* to get pap signals */
+
+/*lint -efile(766,ppp_capp.h) */
+/*lint -efile(766,ppp_caps.h) */
+#include "ppp_capf.h"     /* to get chap functions */
+#include "ppp_capp.h"     /* to get chap primitives */
+#include "ppp_caps.h"     /* to get chap signals */
+
+#include "ppp_dti.h"      /* to get the DTI signals */
+
+/*==== DEFINITIONS ==========================================================*/
+
+/*==== TYPES ================================================================*/
+
+/*==== GLOBAL VARS ==========================================================*/
+
+/*==== LOCAL VARS ===========================================================*/
+
+static  BOOL          first_access  = TRUE;
+static  T_MONITOR     ppp_mon;
+
+/*
+ * Jumptables to primitive handler functions. One table per SAP.
+ *
+ * Use MAK_FUNC_0 for primitives which contains no SDU.
+ * Use MAK_FUNC_S for primitives which contains a SDU.
+ */
+
+/*
+ * Function is needed for developing. This declaration can be removed
+ * as soon as this function is no more called (i.e. all primitives are
+ * handled).
+ */
+
+LOCAL void primitive_not_supported (void *data);
+LOCAL void pei_dti_dti_ready_ind   (T_DTI2_READY_IND        *dti_ready_ind);
+LOCAL void pei_dti_dti_data_req    (T_DTI2_DATA_REQ         *dti_data_req);
+LOCAL void pei_dti_dti_data_ind    (T_DTI2_DATA_IND         *dti_data_ind);
+LOCAL void pei_dti_dti_getdata_req (T_DTI2_GETDATA_REQ      *dti_getdata_req);
+LOCAL void pei_dti_dti_data_test_ind (T_DTI2_DATA_TEST_IND  *dti_data_test_ind);
+LOCAL void pei_dti_dti_data_test_req (T_DTI2_DATA_TEST_REQ  *dti_data_test_req);
+LOCAL void pei_dti_dti_connect_req    (T_DTI2_CONNECT_REQ    *dti_connect_req );
+LOCAL void pei_dti_dti_disconnect_ind (T_DTI2_DISCONNECT_IND *dti_disconnect_ind);   
+LOCAL void pei_dti_dti_connect_cnf    (T_DTI2_CONNECT_CNF    *dti_connect_cnf);
+LOCAL void pei_dti_dti_connect_ind    (T_DTI2_CONNECT_IND    *dti_connect_ind);
+LOCAL void pei_dti_dti_connect_res    (T_DTI2_CONNECT_RES    *dti_connect_res);
+LOCAL void pei_dti_dti_disconnect_req (T_DTI2_DISCONNECT_REQ *dti_disconnect_req);
+
+
+static const T_FUNC ppp_table[] =
+{
+  MAK_FUNC_0(arb_ppp_establish_req,      PPP_ESTABLISH_REQ),    /* 7500 */
+  MAK_FUNC_0(arb_ppp_terminate_req,      PPP_TERMINATE_REQ),    /* 7501 */
+  MAK_FUNC_S(arb_ppp_pdp_activate_res,  PPP_PDP_ACTIVATE_RES),/* 7502 */
+  MAK_FUNC_0(arb_ppp_pdp_activate_rej,  PPP_PDP_ACTIVATE_REJ),/* 7503 */
+  MAK_FUNC_0(arb_ppp_modification_req,  PPP_MODIFICATION_REQ)  /* 7504 */
+};
+
+LOCAL const T_FUNC dti_dl_table[] = {
+  MAK_FUNC_0( pei_dti_dti_connect_ind    ,   DTI2_CONNECT_IND   ),
+  MAK_FUNC_0( pei_dti_dti_connect_cnf    ,   DTI2_CONNECT_CNF   ),
+  MAK_FUNC_0( pei_dti_dti_disconnect_ind ,   DTI2_DISCONNECT_IND)
+  ,
+  MAK_FUNC_0( pei_dti_dti_ready_ind      ,   DTI2_READY_IND      ),
+  MAK_FUNC_0( pei_dti_dti_data_ind       ,   DTI2_DATA_IND       )
+#if defined (_SIMULATION_)
+  ,
+  MAK_FUNC_S( pei_dti_dti_data_test_ind  ,  DTI2_DATA_TEST_IND   )
+#endif
+};
+
+LOCAL const T_FUNC dti_ul_table[] = {
+  MAK_FUNC_0( pei_dti_dti_connect_req       ,   DTI2_CONNECT_REQ   ),
+  MAK_FUNC_0( pei_dti_dti_connect_res       ,   DTI2_CONNECT_RES   ),
+  MAK_FUNC_0( pei_dti_dti_disconnect_req,       DTI2_DISCONNECT_REQ)
+  ,
+  MAK_FUNC_0( pei_dti_dti_getdata_req       ,   DTI2_GETDATA_REQ    ),
+  MAK_FUNC_0( pei_dti_dti_data_req          ,   DTI2_DATA_REQ       )
+
+#if defined (_SIMULATION_)
+  ,
+  MAK_FUNC_S( pei_dti_dti_data_test_req     ,   DTI2_DATA_TEST_REQ  )
+#endif
+};
+
+/*==== DIAGNOSTICS ==========================================================*/
+#ifdef _DEBUG
+#endif /* _DEBUG */
+
+/*==== END DIAGNOSTICS ======================================================*/
+
+/*==== PRIVATE FUNCTIONS ====================================================*/
+
+/*
++------------------------------------------------------------------------------
+|  Function    : primitive_not_supported
++------------------------------------------------------------------------------
+|  Description  :  This function handles unsupported primitives.
+|
+|  Parameters  :  -
+|
+|  Return      :  -
+|
++------------------------------------------------------------------------------
+*/
+LOCAL void primitive_not_supported (void *data)
+{
+  TRACE_FUNCTION ("primitive_not_supported");
+
+  PFREE (data);
+}
+
+
+/*==== PUBLIC FUNCTIONS =====================================================*/
+
+/* qqq hier malen
++------------------------------------------------------------------------------
+|  Function    : pei_primitive
++------------------------------------------------------------------------------
+|  Description  :  This function is called by the frame when a primitive is
+|                  received and needs to be processed.
+|
+|                            |        |
+|                           MMI      DTI                 UPLINK
+|                            |        |
+|                   +--------v--------v--------+
+|                   |                          |
+|                   |            PPP           |
+|                   |                          |
+|                   +-------------^------------+
+|                                 |
+|                                DTI                     DOWNLINK
+|                                 |
+|
+|
+|  Parameters  :  prim      - Pointer to the received primitive
+|
+|  Return      :  PEI_OK    - function succeeded
+|                 PEI_ERROR - function failed
+|
++------------------------------------------------------------------------------
+*/
+
+/*qqq hier kucken*/
+LOCAL SHORT pei_primitive (void * primptr)
+{
+  TRACE_FUNCTION ("pei_primitive");
+
+  if (primptr NEQ NULL)
+  {
+    T_PRIM *prim  = (T_PRIM *)primptr;
+    USHORT           opc = (USHORT)prim->custom.opc;
+    USHORT           n;
+    const T_FUNC    *table;
+
+    /*
+     * This must be called for Partition Pool supervision. Will be replaced
+     * by another macro some time.
+     */
+    VSI_PPM_REC (&prim->custom, __FILE__, __LINE__);
+    PTRACE_IN (opc);
+
+    switch (opc & OPC_MASK)
+    {
+      case PPP_DL:
+        table = ppp_table;
+        n = TAB_SIZE (ppp_table);
+        break;
+      case DTI_UL:
+
+        table = dti_ul_table;
+        n = TAB_SIZE (dti_ul_table);
+        break;
+      case DTI_DL:
+        table = dti_dl_table;
+        n = TAB_SIZE (dti_dl_table);
+        break;
+      default:
+        table = NULL;
+        n = 0;
+        break;
+    }
+
+    if (table NEQ NULL)
+    {
+#define PRIM_OFFSET_DTI2 0x50
+#define PRM_MASK2 0x000F
+      if (((opc & PRM_MASK) - PRIM_OFFSET_DTI2) < n)
+      {
+        table += opc & PRM_MASK2;
+#ifdef PALLOC_TRANSITION
+        P_SDU(prim) = table->soff ? (T_sdu*) (((char*)&prim->data) + table->soff) : 0; /*lint !e740 !e545 */
+#ifndef NO_COPY_ROUTING
+        P_LEN(prim) = table->size + sizeof (T_PRIM_HEADER);
+#endif /* NO_COPY_ROUTING */
+#endif /* PALLOC_TRANSITION */
+        JUMP (table->func) (P2D(prim));
+      }
+      else
+      {
+        primitive_not_supported (P2D(prim));
+      }
+      return PEI_OK;
+    }
+
+    /*
+     * primitive is not a GSM primitive - forward it to the environment
+     */
+    if (opc & SYS_MASK)
+      vsi_c_primitive (VSI_CALLER prim); /*lint !e534 */
+    else
+    {
+      PFREE (P2D(prim));
+      return PEI_ERROR;
+    }
+  }
+  return PEI_OK;
+}
+
+
+/*
++------------------------------------------------------------------------------
+|  Function    : pei_init
++------------------------------------------------------------------------------
+|  Description  : This function is called by the frame. It is used to initialise
+|                 the entitiy.
+|
+|  Parameters  :  handle            - task handle
+|
+|  Return      :  PEI_OK            - entity initialised
+|                 PEI_ERROR         - entity not (yet) initialised
+|
++------------------------------------------------------------------------------
+*/
+
+/*qqq hier Kommunikationskanaele eintragen*/
+LOCAL SHORT pei_init (T_HANDLE handle)
+{
+
+  TRACE_FUNCTION ("pei_init");
+
+  /*
+   * Initialize task handle
+   */
+  PPP_handle = handle;
+  /*
+   * Open communication channel
+   */
+  if (hCommMMI < VSI_OK)
+  {
+    if ((hCommMMI = vsi_c_open (VSI_CALLER ACI_NAME)) < VSI_OK) /*lint !e605 */
+      return PEI_ERROR;
+  }
+
+  if (hCommPPP < VSI_OK)
+  {
+    if ((hCommPPP = vsi_c_open (VSI_CALLER PPP_NAME)) < VSI_OK) /*lint !e605 */
+      return PEI_ERROR;
+  }
+
+  /*
+   * Initialize global pointer ppp_data. This is required to access all
+   * entity data.
+   */
+  ppp_data = &ppp_data_base;
+  ppp_data->fcstab      = fcstab_base;
+  ppp_data->ftx.accmtab = accmtab_base;
+
+
+  /*
+   * Initialize entity data (call init function of every service)
+   */
+  rt_init();
+  prx_init();
+  ptx_init();
+  frx_init();
+  ftx_init();
+  arb_init();
+  lcp_init();
+  ona_init();
+  ncp_init();
+  pap_init();
+  chap_init();
+
+  /*
+   * initialize global entity variables
+   */
+  ppp_data->mc = PPP_MC_DEFAULT;
+  ppp_data->mt = PPP_MT_DEFAULT;
+  ppp_data->mf = PPP_MF_DEFAULT;
+
+    /*
+     * a value different from 0 indicates an error or 
+     * administrative termination
+     */
+  ppp_data->ppp_cause = 0;
+
+  ppp_data->mru  = PPP_MRU_DEFAULT;
+  ppp_data->n_hc = PPP_HC_OFF;
+
+  ppp_data->pco_mask = PPP_PCO_MASK_DEFAULT;
+
+ /*
+  * Init DTILIB channels and allocate the DTI Database
+  */     
+  if ( (
+    ppp_data->ppphDTI = dti_init (
+      MAX_PPP_LINKS,
+      PPP_handle,
+      DTI_DEFAULT_OPTIONS,
+      sig_callback
+      )
+    ) EQ D_NO_DATA_BASE)
+  {
+    TRACE_ERROR("Open the DTILIB Databank not correct");
+    return PEI_ERROR;
+  }
+  return PEI_OK;
+}
+
+/*
++------------------------------------------------------------------------------
+|  Function    : pei_timeout
++------------------------------------------------------------------------------
+|  Description  : This function is called by the frame when a timer has expired.
+|
+|  Parameters  :  index             - timer index
+|
+|  Return      :  PEI_OK            - timeout processed
+|                 PEI_ERROR         - timeout not processed
+|
++------------------------------------------------------------------------------
+*/
+/*qqq hier noch ppp timer eintragen!!!*/
+LOCAL SHORT pei_timeout (USHORT index)
+{
+  TRACE_FUNCTION ("pei_timeout");
+
+  /*
+   * Process timeout
+   */
+  switch (index)
+  {
+    case RT_INDEX:
+      /*
+       * RT expired.
+       */
+      rt_rt_expired();
+      break;
+    default:
+      TRACE_ERROR("Unknown Timeout");
+      break;
+  }
+
+  return PEI_OK;
+}
+
+
+
+/*
++------------------------------------------------------------------------------
+|  Function    : pei_signal
++------------------------------------------------------------------------------
+|  Description  : This function is called by the frame when a signal has been 
+|                 received.
+|
+|  Parameters  :  opc               - signal operation code
+|                 *data             - pointer to primitive
+|
+|  Return      :  PEI_OK            - signal processed
+|                 PEI_ERROR         - signal not processed
+|
++------------------------------------------------------------------------------
+*/
+LOCAL SHORT pei_signal (ULONG opc, void *data)
+{
+  TRACE_FUNCTION ("pei_signal");
+
+  /*
+   * Process signal
+   */
+  switch (opc)
+  {
+#ifdef FF_STATUS_TE
+    /*
+     * Call-back from TE status driver - power status has changed
+     */
+    case NEW_POWER_STATUS:      
+      new_power_status_TE ( );
+      break;
+#endif /* FF_STATUS_TE */
+
+    default:
+      TRACE_ERROR("Unknown Signal OPC");
+      break;
+  } /*lint !e764 switch statement does not have a case */
+
+  return PEI_OK;
+} /*lint !e715 data not referenced */
+
+
+
+/*
++------------------------------------------------------------------------------
+|  Function    : pei_exit
++------------------------------------------------------------------------------
+|  Description  : This function is called by the frame when the entity is
+|                 terminated. All open resources are freed.
+|
+|  Parameters  :  -
+|
+|  Return      :  PEI_OK            - exit sucessful
+|                 PEI_ERROR         - exit not sueccessful
+|
++------------------------------------------------------------------------------
+*/
+LOCAL SHORT pei_exit (void)
+{
+  TRACE_FUNCTION ("pei_exit");
+
+  /*
+   * Stop timer
+   */
+  sig_any_rt_srt_req ();
+
+  /*
+   * Close communication channel
+   */
+  vsi_c_close (VSI_CALLER hCommMMI); /*lint !e534 Ignoring return value */
+  hCommMMI = VSI_ERROR;
+
+  /*
+   *  Deinit the DTI Database
+   */
+  dti_deinit(ppp_data->ppphDTI);
+
+  return PEI_OK;
+}
+
+
+
+/*
++------------------------------------------------------------------------------
+|  Function    : pei_run
++------------------------------------------------------------------------------
+|  Description  : This function is called by the frame when entering the main
+|                 loop. This fucntion is only required in the active variant.
+|
+|                 This function is not used.
+|
+|  Parameters  :  handle            - Communication handle
+|
+|  Return      :  PEI_OK            - sucessful
+|                 PEI_ERROR         - not successful
+|
++------------------------------------------------------------------------------
+*/
+LOCAL SHORT pei_run (T_HANDLE TaskHandle, T_HANDLE ComHandle )
+{
+  return PEI_OK;
+} /*lint !e715 TaskHandle and ComHandle not referenced */
+
+
+
+/*
++------------------------------------------------------------------------------
+|  Function    : pei_config
++------------------------------------------------------------------------------
+|  Description  : This function is called by the frame when a primitive is
+|                 received indicating dynamic configuration.
+|
+|                 This function is not used in this entity.
+|
+|  Parameters  :  handle            - Communication handle
+|
+|  Return      :  PEI_OK            - sucessful
+|                 PEI_ERROR         - not successful
+|
++------------------------------------------------------------------------------
+*/
+LOCAL SHORT pei_config (char *inString)
+{
+#ifndef NCONFIG
+  ULONG new_mask;
+#endif /* !NCONFIG */
+
+  TRACE_FUNCTION ("pei_config");
+  TRACE_FUNCTION (inString);
+
+#ifndef NCONFIG
+  /*
+   * Parse next keyword and number of variables
+   */
+
+  /*if(!strcmp(inString,"PCO="))*/
+  if (inString[0] EQ 'P' &&
+      inString[1] EQ 'C' &&
+      inString[2] EQ 'O' &&
+      inString[3] EQ '=')
+  {
+    TRACE_EVENT ("New PCO content:");
+    new_mask = 0;
+    /*
+     * LCP MRU
+     */
+    if((inString[4] EQ 0x31) ||
+       ((inString[4] NEQ 0x30) && 
+        (ppp_data->pco_mask & PPP_PCO_MASK_LCP_MRU)))
+    {
+      TRACE_EVENT(" - LCP MRU");
+      new_mask|= PPP_PCO_MASK_LCP_MRU;
+    }
+    /*
+     * LCP AP
+     */
+    if((inString[5] EQ 0x31) ||
+       ((inString[5] NEQ 0x30) && 
+        (ppp_data->pco_mask & PPP_PCO_MASK_LCP_AP)))
+    {
+      TRACE_EVENT(" - LCP Authentication protocol");
+      new_mask|= PPP_PCO_MASK_LCP_AP;
+    }
+    /*
+     * LCP TWO
+     */
+    if((inString[6] EQ 0x31) ||
+       ((inString[6] NEQ 0x30) && 
+        (ppp_data->pco_mask & PPP_PCO_MASK_LCP_TWO)))
+    {
+      TRACE_EVENT(" - two LCP packets");
+      new_mask|= PPP_PCO_MASK_LCP_TWO;
+    }
+    /*
+     * Authentication Protocol
+     */
+    if((inString[7] EQ 0x31) ||
+       ((inString[7] NEQ 0x30) && 
+        (ppp_data->pco_mask & PPP_PCO_MASK_AUTH_PROT)))
+    {
+      TRACE_EVENT(" - PAP/CHAP Authentication packet(s)");
+      new_mask|= PPP_PCO_MASK_AUTH_PROT;
+    }
+    /*
+     * IPCP HC
+     */
+    if((inString[8] EQ 0x31) ||
+       ((inString[8] NEQ 0x30) && 
+        (ppp_data->pco_mask & PPP_PCO_MASK_IPCP_HC)))
+    {
+      TRACE_EVENT(" - VJ Header Compression");
+      new_mask|= PPP_PCO_MASK_IPCP_HC;
+    }
+    /*
+     * IPCP IP
+     */
+    if((inString[9] EQ 0x31) ||
+       ((inString[9] NEQ 0x30) && 
+        (ppp_data->pco_mask & PPP_PCO_MASK_IPCP_IP)))
+    {
+      TRACE_EVENT(" - IP address");
+      new_mask|= PPP_PCO_MASK_IPCP_IP;
+    }
+    /*
+     * IPCP PDNS
+     */
+    if((inString[10] EQ 0x31) ||
+       ((inString[10] NEQ 0x30) && 
+        (ppp_data->pco_mask & PPP_PCO_MASK_IPCP_PDNS)))
+    {
+      TRACE_EVENT(" - primary DNS address");
+      new_mask|= PPP_PCO_MASK_IPCP_PDNS;
+    }
+    /*
+     * IPCP SDNS
+     */
+    if((inString[11] EQ 0x31) ||
+       ((inString[11] NEQ 0x30) && 
+        (ppp_data->pco_mask & PPP_PCO_MASK_IPCP_SDNS)))
+    {
+      TRACE_EVENT(" - secondary DNS address");
+      new_mask|= PPP_PCO_MASK_IPCP_SDNS;
+    }
+    /*
+     * IPCP GATEWAY
+     */
+    if((inString[12] EQ 0x31) ||
+       ((inString[12] NEQ 0x30) && 
+        (ppp_data->pco_mask & PPP_PCO_MASK_IPCP_GATEWAY)))
+    {
+      TRACE_EVENT(" - Gateway address");
+      new_mask|= PPP_PCO_MASK_IPCP_GATEWAY;
+    }
+
+    if(new_mask EQ 0)
+    {
+      TRACE_EVENT(" - no content");
+    }
+    /*
+     * set new PCO mask
+     */
+    ppp_data->pco_mask = new_mask;
+  }
+  else
+  {
+    TRACE_ERROR("config command does not exist");
+  }
+#endif /* !NCONFIG */
+
+  return PEI_OK;
+}
+
+
+
+/*
++------------------------------------------------------------------------------
+|  Function    : pei_config
++------------------------------------------------------------------------------
+|  Description  : This function is called by the frame in case sudden entity
+|                 specific data is requested (e.g. entity Version).
+|
+|  Parameters  :  out_monitor       - return the address of the data to be
+|                                     monitoredCommunication handle
+|
+|  Return      :  PEI_OK            - sucessful (address in out_monitor is valid)
+|                 PEI_ERROR         - not successful
+|
++------------------------------------------------------------------------------
+*/
+LOCAL SHORT pei_monitor (void ** out_monitor)
+{
+  TRACE_FUNCTION ("pei_monitor");
+
+  /*
+   * Version = "0.S" (S = Step).
+   */
+  ppp_mon.version = VERSION_PPP; /*lint !e605 Increase in pointer capability */
+  *out_monitor = &ppp_mon;
+
+  return PEI_OK;
+}
+
+
+
+/*
++------------------------------------------------------------------------------
+|  Function    : pei_create
++------------------------------------------------------------------------------
+|  Description  :  This function is called by the frame when the process is 
+|                  created.
+|
+|  Parameters  :  out_name          - Pointer to the buffer in which to locate
+|                                     the name of this entity
+|
+|  Return      :  PEI_OK            - entity created successfuly
+|                 PEI_ERROR         - entity could not be created
+|
++------------------------------------------------------------------------------
+*/
+GLOBAL SHORT pei_create (T_PEI_INFO **info)
+{
+  static T_PEI_INFO pei_info =
+              {
+               "PPP",         /*lint !e605 Increase in pointer capability */
+               {              /* pei-table */
+                 pei_init,
+                 pei_exit,
+                 pei_primitive,
+                 pei_timeout,
+                 pei_signal,
+                 pei_run,
+                 pei_config,
+                 pei_monitor
+               },
+               2048,          /* stack size */
+               10,            /* queue entries */
+               185,           /* priority (1->low, 255->high) */
+               TIMER_MAX,     /* number of timers */
+               0x03|PRIM_NO_SUSPEND /* flags: bit 0   active(0) body/passive(1) */
+              };              /*        bit 1   com by copy(0)/reference(1) */
+
+
+  TRACE_FUNCTION ("pei_create");
+
+  /*
+   * Close Resources if open
+   */
+  if (first_access)
+    first_access = FALSE;
+  else
+    pei_exit(); /*lint !e534 Ignoring return value */
+
+  /*
+   * Export startup configuration data
+   */
+  *info = &pei_info;
+
+  return PEI_OK;
+}
+
+/*
++------------------------------------------------------------------------------
+|  Function    : sig_callback
++------------------------------------------------------------------------------
+|  Description  :  This is the DTI Callback Function which handles the DTI signals.
+|          
+|
+|  Parameters  :  instance        -   DTI instance  
+|                 inter_face      -   DTI interface
+|                 channel         -   DTI channel
+|                 reason          -   DTI reason
+|                 *dti_data_ind   -   Ptr. to the data primitive
+|
++------------------------------------------------------------------------------
+*/
+
+GLOBAL void sig_callback(U8 instance, U8 inter_face, U8 channel,
+                         U8 reason, T_DTI2_DATA_IND *dti_data_ind)
+{
+  DTI_HANDLE hDTI;
+
+  TRACE_FUNCTION("sig_callback");
+  
+  hDTI = ppp_data->ppphDTI;
+  
+  if (hDTI NEQ D_NO_DATA_BASE)
+  {
+    switch (reason)
+    {
+      case DTI_REASON_CONNECTION_OPENED:
+        /*
+         *  DTI connect
+         */
+        sig_dti_arb_connection_opened_ind (hDTI, instance, inter_face, channel);
+        break;
+
+      case DTI_REASON_CONNECTION_CLOSED:
+        /*
+         *  DTI disconnect
+         */
+        sig_dti_arb_connection_closed_ind (hDTI, instance, inter_face, channel);
+        break;
+
+      case DTI_REASON_DATA_RECEIVED:
+        if(inter_face EQ PROT_LAYER)          
+          /*
+           *  Data packet recived from Protocol Layer. Process it and send.
+           */
+          sig_dti_prx_data_received_ind(dti_data_ind);
+        else
+          /*
+           *  Data packet recived from Peer Layer. Process it and send.
+           */            
+          sig_dti_frx_data_received_ind (dti_data_ind);
+        break;
+
+      case DTI_REASON_TX_BUFFER_FULL:
+        if(inter_face EQ PROT_LAYER)
+            /*
+             *  Buffer full for sending data to Protocol Layer.
+             */
+            sig_dti_ptx_tx_buffer_full_ind();
+         else
+            /*
+             *  Buffer full for sending data to Peer Layer.
+             */
+            sig_dti_ftx_tx_buffer_full_ind ();
+        break;
+
+      case DTI_REASON_TX_BUFFER_READY:
+        if(inter_face EQ PROT_LAYER)
+            /*
+             *  Buffer ready Protocol Layer.
+             */
+            sig_dti_ptx_tx_buffer_ready_ind();
+          else
+            /*
+             *  Buffer ready Peer Layer.
+             */
+            sig_dti_ftx_tx_buffer_ready_ind();
+        break;
+
+      default:
+        TRACE_ERROR("Pointer to no DTI database");
+        break;
+    } /* end switch */
+  } /* end if */
+  else 
+  {
+    TRACE_ERROR("Pointer to DTILIB database non existing");
+  }
+} /* sig_callback() */
+
+/*
++------------------------------------------------------------------------------
+| Function    : sig_any_dti_data_ind
++------------------------------------------------------------------------------
+| Description : This function sends a Data Primitive
+|
+| Parameters  : *hDTI           -   Ptr. to DTI Databank
+|               *dti_data_ind   -   Ptr. to Primitive which shall be sended
+|               instance        -   DTI instance
+|               interface       -   DTI interface
+|               channel         -   DTI channel
+|
++------------------------------------------------------------------------------
+*/
+
+GLOBAL void sig_any_dti_data_ind (
+  DTI_HANDLE hDTI,
+  T_DTI2_DATA_IND *dti_data_ind,
+  UBYTE instance,
+  UBYTE inter_face,
+  UBYTE channel,
+  UBYTE p_id
+  )
+{
+  T_desc2*  temp_desc;
+
+  TRACE_FUNCTION ("sig_any_dti_data_ind()");
+                                            
+  dti_data_ind->parameters.p_id                   = p_id;
+  dti_data_ind->parameters.st_lines.st_flow       = DTI_FLOW_ON;
+  dti_data_ind->parameters.st_lines.st_line_sa    = DTI_SA_ON;
+  dti_data_ind->parameters.st_lines.st_line_sb    = DTI_SB_ON;
+  dti_data_ind->parameters.st_lines.st_break_len  = DTI_BREAK_OFF;
+
+  /*
+   *  This PPP does not support handle of offset in the descriptor. 
+   *  Offset is set to 0 and size to len.
+   */
+  temp_desc = (T_desc2*)dti_data_ind->desc_list2.first;
+  while(temp_desc)
+  {
+    temp_desc->offset = 0;
+    temp_desc->size   = temp_desc->len;
+    temp_desc         = (T_desc2*)temp_desc->next;
+  }
+  
+  dti_send_data(hDTI, instance, inter_face, channel, dti_data_ind);
+} /* sig_any_dti_data_ind () */
+
+
+/*
++------------------------------------------------------------------------------
+| Function    : pei_dti_dti_connect_req
++------------------------------------------------------------------------------
+| Description : Helpfunction to activate dti_dti_connect_req
+|
+| Parameters  : Ptr. to primitive
+|
++------------------------------------------------------------------------------
+*/
+
+GLOBAL void pei_dti_dti_connect_req (
+                    T_DTI2_CONNECT_REQ   *dti_connect_req
+                  )
+{
+    dti_dti_connect_req (ppp_data->ppphDTI, dti_connect_req);
+}
+
+
+/*
++------------------------------------------------------------------------------
+| Function    : pei_dti_dti_disconnect_ind
++------------------------------------------------------------------------------
+| Description : Helpfunction to activate dti_dti_disconnect_ind
+|
+| Parameters  : Ptr. to primitive
+|
++------------------------------------------------------------------------------
+*/
+
+GLOBAL void pei_dti_dti_disconnect_ind (
+                    T_DTI2_DISCONNECT_IND   *dti_disconnect_ind
+                  )
+{
+    dti_dti_disconnect_ind (ppp_data->ppphDTI, dti_disconnect_ind);
+}
+
+/*
++------------------------------------------------------------------------------
+| Function    : pei_dti_dti_connect_cnf
++------------------------------------------------------------------------------
+| Description : Helpfunction to activate dti_dti_connect_cnf
+|
+| Parameters  : Ptr. to primitive
+|
++------------------------------------------------------------------------------
+*/
+    
+GLOBAL void pei_dti_dti_connect_cnf (
+                    T_DTI2_CONNECT_CNF   *dti_connect_cnf
+                  )
+{
+    dti_dti_connect_cnf(ppp_data->ppphDTI, dti_connect_cnf);
+}
+
+
+/*
++------------------------------------------------------------------------------
+| Function    : pei_dti_dti_connect_ind
++------------------------------------------------------------------------------
+| Description : Helpfunction to activate dti_dti_connect_ind
+|
+| Parameters  : Ptr. to primitive
+|
++------------------------------------------------------------------------------
+*/
+    
+GLOBAL void pei_dti_dti_connect_ind (
+                    T_DTI2_CONNECT_IND   *dti_connect_ind
+                  )
+{    
+    dti_dti_connect_ind(ppp_data->ppphDTI, dti_connect_ind);
+}
+
+
+/*
++------------------------------------------------------------------------------
+| Function    : pei_dti_dti_connect_res
++------------------------------------------------------------------------------
+| Description : Helpfunction to activate dti_dti_connect_res
+|
+| Parameters  : Ptr. to primitive
+|
++------------------------------------------------------------------------------
+*/
+    
+GLOBAL void pei_dti_dti_connect_res (
+                    T_DTI2_CONNECT_RES   *dti_connect_res
+                  )
+{
+    dti_dti_connect_res(ppp_data->ppphDTI, dti_connect_res);  
+}
+
+/*
++------------------------------------------------------------------------------
+| Function    : pei_dti_dti_disconnect_req
++------------------------------------------------------------------------------
+| Description : Helpfunction to activate dti_dti_disconnect_req
+|
+| Parameters  : Ptr. to primitive
+|
++------------------------------------------------------------------------------
+*/
+    
+GLOBAL void pei_dti_dti_disconnect_req (
+                    T_DTI2_DISCONNECT_REQ   *dti_disconnect_req
+                  )
+{
+    dti_dti_disconnect_req (ppp_data->ppphDTI, dti_disconnect_req);
+}
+
+
+/*
++------------------------------------------------------------------------------
+| Function    : pei_dti_dti_ready_ind
++------------------------------------------------------------------------------
+| Description : Helpfunction to activate dti_dti_ready_ind
+|
+| Parameters  : Ptr. to primitive
+|
++------------------------------------------------------------------------------
+*/
+    
+GLOBAL void pei_dti_dti_ready_ind (
+                    T_DTI2_READY_IND   *dti_ready_ind
+                  )
+{
+    dti_dti_ready_ind (ppp_data->ppphDTI, dti_ready_ind);
+}
+
+/*
++------------------------------------------------------------------------------
+| Function    : pei_dti_dti_data_req
++------------------------------------------------------------------------------
+| Description : Helpfunction to activate dti_dti_data_req
+|
+| Parameters  : Ptr. to primitive
+|
++------------------------------------------------------------------------------
+*/
+
+GLOBAL void pei_dti_dti_data_req (
+                    T_DTI2_DATA_REQ   *dti_data_req
+                  )
+{
+    dti_dti_data_req (ppp_data->ppphDTI, dti_data_req);
+}
+
+/*
++------------------------------------------------------------------------------
+| Function    : pei_dti_dti_data_ind
++------------------------------------------------------------------------------
+| Description : Helpfunction to activate dti_dti_data_ind
+|
+| Parameters  : Ptr. to primitive
+|
++------------------------------------------------------------------------------
+*/
+    
+GLOBAL void pei_dti_dti_data_ind (
+                    T_DTI2_DATA_IND   *dti_data_ind
+                  )
+{
+    dti_dti_data_ind (ppp_data->ppphDTI, dti_data_ind);
+}
+
+/*
++------------------------------------------------------------------------------
+| Function    : pei_dti_dti_getdata_req
++------------------------------------------------------------------------------
+| Description : Helpfunction to activate dti_dti_getdata_req
+|
+| Parameters  : Ptr. to primitive
+|
++------------------------------------------------------------------------------
+*/
+    
+GLOBAL void pei_dti_dti_getdata_req (
+                    T_DTI2_GETDATA_REQ   *dti_getdata_req
+                  )
+{
+  dti_dti_getdata_req (ppp_data->ppphDTI, dti_getdata_req);
+}
+ 
+/*==== Start functions only use with Windows ===============================*/
+
+#if defined (_SIMULATION_)
+
+/*
++------------------------------------------------------------------------------
+| Function    : pei_dti_dti_data_test_req
++------------------------------------------------------------------------------
+| Description : Helpfunction to activate dti_dti_data_test_req
+|
+| Parameters  : Ptr. to primitive
+|
++------------------------------------------------------------------------------
+*/
+    
+GLOBAL void pei_dti_dti_data_test_req (
+                    T_DTI2_DATA_TEST_REQ   *dti_data_test_req
+                  )
+{
+    dti_dti_data_test_req (ppp_data->ppphDTI, dti_data_test_req);
+}
+
+/*
++------------------------------------------------------------------------------
+| Function    : pei_dti_dti_data_test_ind
++------------------------------------------------------------------------------
+| Description : Helpfunction to activate dti_dti_data_test_req
+|
+| Parameters  : Ptr. to primitive
+|
++------------------------------------------------------------------------------
+*/
+    
+GLOBAL void pei_dti_dti_data_test_ind (
+                    T_DTI2_DATA_TEST_IND   *dti_data_test_ind
+                  )
+{
+  dti_dti_data_test_ind (ppp_data->ppphDTI, dti_data_test_ind);   
+}
+
+#endif /* _SIMULATION_) */
+
+/*==== END OF FILE =========================================================*/