diff src/g23m-fad/ppp/ppp_onas.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_onas.c	Fri Oct 16 06:25:50 2020 +0000
@@ -0,0 +1,1334 @@
+/* 
++----------------------------------------------------------------------------- 
+|  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 modul is part of the entity PPP and implements all 
+|             functions to handles the incoming process internal signals as  
+|             described in the SDL-documentation (ONA-statemachine)
++----------------------------------------------------------------------------- 
+*/ 
+
+#ifndef PPP_ONAS_C
+#define PPP_ONAS_C
+#endif /* !PPP_ONAS_C */
+
+#define ENTITY_PPP
+
+/*==== INCLUDES =============================================================*/
+
+#include "typedefs.h"   /* to get Condat data types */
+#include "vsi.h"        /* to get a lot of macros */
+#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 */
+#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 */
+
+#include "ppp_arbf.h"   /* to get the arb function definitions */
+#include "ppp_ftxs.h"   /* to get the ftx signal interface */
+#include "ppp_lcps.h"   /* to get the lcp signal interface */
+#include "ppp_ncps.h"   /* to get the ncp signal interface */
+#include "ppp_onaf.h"   /* to get the ona function definitions */
+#include "ppp_rts.h"    /* to get the rt signal interface */
+
+/*==== CONST ================================================================*/
+
+/*==== LOCAL VARS ===========================================================*/
+
+/*==== PRIVATE FUNCTIONS ====================================================*/
+
+/*==== PUBLIC FUNCTIONS =====================================================*/
+
+
+
+/*
++------------------------------------------------------------------------------
+| Function    : sig_any_ona_ruc_ind
++------------------------------------------------------------------------------
+| Description : Handles the internal signal SIG_ANY_ONA_RUC_IND
+|
+| Parameters  : ptype  - type of packet
+|               packet - pointer to a generic data descriptor
+|
++------------------------------------------------------------------------------
+*/
+GLOBAL void sig_any_ona_ruc_ind (USHORT ptype, T_desc2* packet) 
+{ 
+  UBYTE index;
+  TRACE_ISIG( "sig_any_ona_ruc_ind" );
+  
+  /*
+   * determine ONA-instance
+   */
+  ona_get_inst_index(ptype, &index);
+  ppp_data->ona = & ppp_data->ona_base[index];
+
+  switch( GET_STATE( PPP_SERVICE_ONA ) )
+  {
+    case ONA_CLOSING:
+    case ONA_REQ_SENT:
+    case ONA_ACK_RCVD:
+    case ONA_ACK_SENT:
+    case ONA_OPENED:
+      /*
+       * send code reject
+       */
+      sig_any_ftx_packet_req(ptype, packet); /* scj */
+      break;
+    default:
+      TRACE_ERROR( "SIG_ANY_ONA_RUC_IND unexpected" );
+      arb_discard_packet(packet);
+      break;
+  }
+} /* sig_any_ona_ruc_ind() */
+
+
+
+/*
++------------------------------------------------------------------------------
+| Function    : sig_any_ona_open_ind
++------------------------------------------------------------------------------
+| Description : Handles the internal signal SIG_ANY_ONA_OPEN_IND
+|
+| Parameters  : ptype  - type of packet
+|               packet - pointer to a generic data descriptor
+|
++------------------------------------------------------------------------------
+*/
+GLOBAL void sig_any_ona_open_ind (USHORT ptype, T_desc2* packet) 
+{ 
+  UBYTE index;
+  TRACE_ISIG( "sig_any_ona_open_ind" );
+  
+  /*
+   * determine ONA-instance
+   */
+  ona_get_inst_index(ptype, &index);
+  ppp_data->ona = & ppp_data->ona_base[index];
+
+  switch( GET_STATE( PPP_SERVICE_ONA ) )
+  {
+    case ONA_OPENED:
+    case ONA_CLOSED:
+    case ONA_CLOSING:
+    case ONA_REQ_SENT:
+    case ONA_ACK_RCVD:
+    case ONA_ACK_SENT:
+      SET_STATE( PPP_SERVICE_ONA, ONA_REQ_SENT );
+      /*
+       * reset counters
+       */
+      ppp_data->ona->restarts = ppp_data->mc;
+      ppp_data->ona->failures = ppp_data->mf;
+      ppp_data->ona->loops    = ppp_data->mc + 1;
+      /*
+       * send configure request
+       */
+      sig_any_ftx_packet_req(ptype, packet); /* scr */
+      /*
+       * start timer
+       */
+      if(ppp_data->ona->restarts > 0)
+        ppp_data->ona->restarts--;
+      sig_any_rt_rrt_req();
+      break;
+    default:
+      TRACE_ERROR( "SIG_ANY_ONA_OPEN_IND unexpected" );
+      arb_discard_packet(packet);
+      break;
+  }
+} /* sig_any_ona_open_ind() */
+
+
+
+/*
++------------------------------------------------------------------------------
+| Function    : sig_any_ona_down_ind
++------------------------------------------------------------------------------
+| Description : Handles the internal signal SIG_ANY_ONA_DOWN_IND
+|
+| Parameters  : ptype  - type of packet
+|
++------------------------------------------------------------------------------
+*/
+GLOBAL void sig_any_ona_down_ind (USHORT ptype) 
+{ 
+  UBYTE index;
+  TRACE_ISIG( "sig_any_ona_down_ind" );
+  
+  /*
+   * determine ONA-instance
+   */
+  ona_get_inst_index(ptype, &index);
+  ppp_data->ona = & ppp_data->ona_base[index];
+
+  switch( GET_STATE( PPP_SERVICE_ONA ) )
+  {
+    case ONA_CLOSED:
+    case ONA_OPENED:
+      SET_STATE( PPP_SERVICE_ONA, ONA_CLOSED );
+      break;
+    case ONA_CLOSING:
+    case ONA_REQ_SENT:
+    case ONA_ACK_RCVD:
+    case ONA_ACK_SENT:
+      SET_STATE( PPP_SERVICE_ONA, ONA_CLOSED );
+      /*
+       * stop timer
+       */
+      sig_any_rt_srt_req();
+      break;
+    default:
+      TRACE_ERROR( "SIG_ANY_ONA_DOWN_IND unexpected" );
+      break;
+  }
+} /* sig_any_ona_down_ind() */
+
+
+
+/*
++------------------------------------------------------------------------------
+| Function    : sig_any_ona_close_ind
++------------------------------------------------------------------------------
+| Description : Handles the internal signal SIG_ANY_ONA_CLOSE_IND
+|
+| Parameters  : ptype  - type of packet
+|               packet - pointer to a generic data descriptor
+|
++------------------------------------------------------------------------------
+*/
+GLOBAL void sig_any_ona_close_ind (USHORT ptype, T_desc2* packet) 
+{ 
+  UBYTE index;
+  TRACE_ISIG( "sig_any_ona_close_ind" );
+  
+  /*
+   * determine ONA-instance
+   */
+  ona_get_inst_index(ptype, &index);
+  ppp_data->ona = & ppp_data->ona_base[index];
+
+  switch( GET_STATE( PPP_SERVICE_ONA ) )
+  {
+    case ONA_CLOSED:
+      arb_discard_packet(packet);
+      /*
+       * send This-Layer-Finished signal
+       */
+      if (ptype EQ DTI_PID_LCP) 
+      {
+        sig_ona_lcp_tlf_req();
+      } 
+      else if (ptype EQ DTI_PID_IPCP) 
+      {
+        sig_ona_ncp_tlf_req();
+      } 
+      break;
+    case ONA_CLOSING:
+      arb_discard_packet(packet);
+      break;
+    case ONA_OPENED:
+    case ONA_REQ_SENT:
+    case ONA_ACK_RCVD:
+    case ONA_ACK_SENT:
+      SET_STATE( PPP_SERVICE_ONA, ONA_CLOSING );
+      /*
+       * reset counter
+       */
+      ppp_data->ona->restarts = ppp_data->mt;
+      /*
+       * send terminate request
+       */
+      sig_any_ftx_packet_req(ptype, packet); /* str */
+      /*
+       * start timer
+       */
+      if(ppp_data->ona->restarts > 0)
+        ppp_data->ona->restarts--;
+      sig_any_rt_rrt_req();
+      break;
+    default:
+      TRACE_ERROR( "SIG_ANY_ONA_CLOSE_IND unexpected" );
+      arb_discard_packet(packet);
+      break;
+  }
+} /* sig_any_ona_close_ind() */
+
+
+
+/*
++------------------------------------------------------------------------------
+| Function    : sig_any_ona_rtr_ind
++------------------------------------------------------------------------------
+| Description : Handles the internal signal SIG_ANY_ONA_RTR_IND
+|
+| Parameters  : ptype  - type of packet
+|               packet - pointer to a generic data descriptor
+|
++------------------------------------------------------------------------------
+*/
+GLOBAL void sig_any_ona_rtr_ind (USHORT ptype, T_desc2* packet) 
+{
+  UBYTE index;
+
+  TRACE_ISIG( "sig_any_ona_rtr_ind" );
+
+  TRACE_EVENT( "Peer requested Termination by PPP frame" );
+
+  /*
+   * determine ONA-instance
+   */
+  ona_get_inst_index(ptype, &index);
+  ppp_data->ona = & ppp_data->ona_base[index];
+
+  switch( GET_STATE( PPP_SERVICE_ONA ) )
+  {
+    case ONA_CLOSING:
+      /*
+       * send terminate acknowledge
+       */
+      sig_any_ftx_packet_req(ptype, packet); /* sta */
+      break;
+    case ONA_OPENED:
+      SET_STATE( PPP_SERVICE_ONA, ONA_CLOSING );
+      /*
+       * send This-Layer-Down signal
+       */
+      if (ptype EQ DTI_PID_LCP) 
+      {
+        sig_ona_lcp_tld_req();
+      } 
+      else if (ptype EQ DTI_PID_IPCP) 
+      {
+        sig_ona_ncp_tld_req();
+      } 
+      ppp_data->ona = & ppp_data->ona_base[index];
+    case ONA_REQ_SENT:
+    case ONA_ACK_RCVD:
+    case ONA_ACK_SENT:
+      SET_STATE( PPP_SERVICE_ONA, ONA_CLOSING );
+      /*
+       * set counter to zero
+       */
+      ppp_data->ona->restarts = 0;
+      /*
+       * send terminate acknowledge
+       */
+      sig_any_ftx_packet_req(ptype, packet); /* sta */
+      /*
+       * start timer
+       */
+      sig_any_rt_rrt_req();
+      break;
+    default:
+      TRACE_ERROR( "SIG_ANY_ONA_RTR_IND unexpected" );
+      arb_discard_packet(packet);
+      break;
+  }
+
+  /*
+   * set error code
+   */
+  if(ppp_data->ppp_cause EQ 0)
+    ppp_data->ppp_cause = PPP_TERM_OK_PEER;
+
+} /* sig_any_ona_rtr_ind() */
+
+
+
+/*
++------------------------------------------------------------------------------
+| Function    : sig_any_ona_to_ind
++------------------------------------------------------------------------------
+| Description : Handles the internal signal SIG_ANY_ONA_TO_IND
+|
+| Parameters  : ptype  - type of packet
+|
++------------------------------------------------------------------------------
+*/
+GLOBAL void sig_any_ona_to_ind (USHORT ptype) 
+{ 
+  UBYTE index;
+  T_desc2* packet = NULL;
+  TRACE_ISIG( "sig_any_ona_to_ind" );
+  
+  /*
+   * determine ONA-instance
+   */
+  ona_get_inst_index(ptype, &index);
+  ppp_data->ona = & ppp_data->ona_base[index];
+
+  switch( GET_STATE( PPP_SERVICE_ONA ) )
+  {
+    case ONA_CLOSING:
+      if (ppp_data->ona->restarts EQ 0)
+      {
+        /*
+         * negative timeout
+         */
+        SET_STATE( PPP_SERVICE_ONA, ONA_CLOSED );
+        /*
+         * set error code
+         */
+        if(ppp_data->ppp_cause EQ 0)
+          ppp_data->ppp_cause = PPP_TERM_NO_RESPONSE;
+        /*
+         * send This-Layer-Finished signal
+         */
+        if (ptype EQ DTI_PID_LCP) 
+        {
+          sig_ona_lcp_tlf_req();
+        } 
+        else if (ptype EQ DTI_PID_IPCP) 
+        {
+          sig_ona_ncp_tlf_req();
+        }
+      }
+      else
+      {
+        /*
+         * positive timeout
+         */
+        /*
+         * request a new terminate request packet
+         */
+        if (ptype EQ DTI_PID_LCP) 
+        {
+          sig_ona_lcp_str_req(&packet);
+        } 
+        else if (ptype EQ DTI_PID_IPCP) 
+        {
+          sig_ona_ncp_str_req(&packet);
+        }
+        /*
+         * set counter and send terminate request packet
+         */
+        ppp_data->ona->restarts--;
+        sig_any_ftx_packet_req(ptype, packet); /* str */
+        /*
+         * restart timer
+         */
+        sig_any_rt_rrt_req();
+      }
+      break;
+    case ONA_REQ_SENT:
+    case ONA_ACK_SENT:
+      if (ppp_data->ona->restarts EQ 0)
+      {
+        /*
+         * negative timeout
+         */
+        SET_STATE( PPP_SERVICE_ONA, ONA_CLOSED );
+        /*
+         * set error code
+         */
+        if(ppp_data->ppp_cause EQ 0)
+          ppp_data->ppp_cause = PPP_TERM_NO_RESPONSE;
+        /*
+         * send This-Layer-Finished signal
+         */
+        if (ptype EQ DTI_PID_LCP) 
+        {
+          sig_ona_lcp_tlf_req();
+        } 
+        else if (ptype EQ DTI_PID_IPCP) 
+        {
+          sig_ona_ncp_tlf_req();
+        }
+      }
+      else
+      {
+        /*
+         * positive timeout
+         */
+        /*
+         * request a new configure request packet
+         */
+        if (ptype EQ DTI_PID_LCP) 
+        {
+          sig_ona_lcp_scr_req(&packet);
+        } 
+        else if (ptype EQ DTI_PID_IPCP) 
+        {
+          sig_ona_ncp_scr_req(&packet);
+        }
+        /*
+         * set counter and send configure request packet
+         */
+        ppp_data->ona->restarts--;
+        sig_any_ftx_packet_req(ptype, packet); /* scr */
+        /*
+         * restart timer
+         */
+        sig_any_rt_rrt_req();
+      }      
+      break;
+    case ONA_ACK_RCVD:
+      if (ppp_data->ona->restarts EQ 0)
+      {
+        /*
+         * negative timeout
+         */
+        SET_STATE( PPP_SERVICE_ONA, ONA_CLOSED );
+        /*
+         * set error code
+         */
+        if(ppp_data->ppp_cause EQ 0)
+          ppp_data->ppp_cause = PPP_TERM_NO_RESPONSE;
+        /*
+         * send This-Layer-Finished signal
+         */
+        if (ptype EQ DTI_PID_LCP) 
+        {
+          sig_ona_lcp_tlf_req();
+        } 
+        else if (ptype EQ DTI_PID_IPCP) 
+        {
+          sig_ona_ncp_tlf_req();
+        }
+      }
+      else
+      {
+        /*
+         * positive timeout
+         */
+        SET_STATE( PPP_SERVICE_ONA, ONA_REQ_SENT );
+        /*
+         * request a new configure request packet
+         */
+        if (ptype EQ DTI_PID_LCP) 
+        {
+          sig_ona_lcp_scr_req(&packet);
+        } 
+        else if (ptype EQ DTI_PID_IPCP) 
+        {
+          sig_ona_ncp_scr_req(&packet);
+        }
+        /*
+         * set counter and send configure request packet
+         */
+        ppp_data->ona->restarts--;
+        sig_any_ftx_packet_req(ptype, packet); /* scr */
+        /*
+         * restart timer
+         */
+        sig_any_rt_rrt_req();
+      }      
+      break;
+    default:
+      TRACE_ERROR( "SIG_ANY_ONA_TO_IND unexpected" );
+      break;
+  }
+} /* sig_any_ona_to_ind() */
+
+
+
+/*
++------------------------------------------------------------------------------
+| Function    : sig_any_ona_rta_ind
++------------------------------------------------------------------------------
+| Description : Handles the internal signal SIG_ANY_ONA_RTA_IND
+|
+| Parameters  : ptype  - type of packet
+|
++------------------------------------------------------------------------------
+*/
+GLOBAL void sig_any_ona_rta_ind (USHORT ptype) 
+{ 
+  UBYTE index;
+  T_desc2* packet = NULL;
+  TRACE_ISIG( "sig_any_ona_rta_ind" );
+  
+  /*
+   * determine ONA-instance
+   */
+  ona_get_inst_index(ptype, &index);
+  ppp_data->ona = & ppp_data->ona_base[index];
+
+  switch( GET_STATE( PPP_SERVICE_ONA ) )
+  {
+    case ONA_CLOSING:
+      SET_STATE( PPP_SERVICE_ONA, ONA_CLOSED );
+      /*
+       * stop timer
+       */
+      sig_any_rt_srt_req();
+      /*
+       * send This-Layer-Finished signal
+       */
+      if (ptype EQ DTI_PID_LCP) 
+      {
+        sig_ona_lcp_tlf_req();
+      } 
+      else if (ptype EQ DTI_PID_IPCP) 
+      {
+        sig_ona_ncp_tlf_req();
+      }
+      break;
+    case ONA_REQ_SENT:
+    case ONA_ACK_RCVD:
+    case ONA_ACK_SENT:
+      break;
+    case ONA_OPENED:
+      SET_STATE( PPP_SERVICE_ONA, ONA_REQ_SENT );
+      /*
+       * send This-Layer-Down signal and
+       * request a new configure request packet
+       */
+      if (ptype EQ DTI_PID_LCP) 
+      {
+        sig_ona_lcp_tld_req();
+        sig_ona_lcp_scr_req(&packet);
+      } 
+      else if (ptype EQ DTI_PID_IPCP) 
+      {
+        sig_ona_ncp_tld_req();
+        sig_ona_ncp_scr_req(&packet);
+      }
+      ppp_data->ona = & ppp_data->ona_base[index];
+      /*
+       * send configure request packet
+       */
+      sig_any_ftx_packet_req(ptype, packet); /* scr */
+      /*
+       * start timer
+       */
+      if(ppp_data->ona->restarts > 0)
+        ppp_data->ona->restarts--;
+      sig_any_rt_rrt_req();
+      break;
+    default:
+      TRACE_ERROR( "SIG_ANY_ONA_RTA_IND unexpected" );
+      break;
+  }
+} /* sig_any_ona_rta_ind() */
+
+
+
+/*
++------------------------------------------------------------------------------
+| Function    : sig_any_ona_rxjn_ind
++------------------------------------------------------------------------------
+| Description : Handles the internal signal SIG_ANY_ONA_RXJN_IND
+|
+| Parameters  : ptype  - type of packet
+|               packet - pointer to a generic data descriptor
+|
++------------------------------------------------------------------------------
+*/
+GLOBAL void sig_any_ona_rxjn_ind (USHORT ptype, T_desc2* packet) 
+{ 
+  UBYTE index;
+  TRACE_ISIG( "sig_any_ona_rxjn_ind" );
+  
+  /*
+   * determine ONA-instance
+   */
+  ona_get_inst_index(ptype, &index);
+  ppp_data->ona = & ppp_data->ona_base[index];
+
+  /*
+   * set error code
+   */
+  if(ppp_data->ppp_cause EQ 0)
+  {
+    switch(ptype)
+    {
+      case DTI_PID_LCP:
+        ppp_data->ppp_cause = PPP_TERM_LCP_NOT_CONVERGE;
+        break;
+      case DTI_PID_IPCP:
+        ppp_data->ppp_cause = PPP_TERM_IPCP_NOT_CONVERGE;
+        break;
+    }
+  }
+
+  switch( GET_STATE( PPP_SERVICE_ONA ) )
+  {
+    case ONA_CLOSING:
+      SET_STATE( PPP_SERVICE_ONA, ONA_CLOSED );
+      arb_discard_packet(packet);
+      /*
+       * stop timer
+       */
+      sig_any_rt_srt_req();
+      /*
+       * send This-Layer-Finished signal
+       */
+      if (ptype EQ DTI_PID_LCP) 
+      {
+        sig_ona_lcp_tlf_req();
+      } 
+      else if (ptype EQ DTI_PID_IPCP) 
+      {
+        sig_ona_ncp_tlf_req();
+      }
+      break;
+    case ONA_OPENED:
+      SET_STATE( PPP_SERVICE_ONA, ONA_CLOSING );
+      /*
+       * send This-Layer-Down signal
+       */
+      if (ptype EQ DTI_PID_LCP) 
+      {
+        sig_ona_lcp_tld_req();
+      } 
+      else if (ptype EQ DTI_PID_IPCP) 
+      {
+        sig_ona_ncp_tld_req();
+      }
+      ppp_data->ona = & ppp_data->ona_base[index];
+    case ONA_REQ_SENT:
+    case ONA_ACK_RCVD:
+    case ONA_ACK_SENT:
+      SET_STATE( PPP_SERVICE_ONA, ONA_CLOSING );
+      /*
+       * set counter
+       */
+      ppp_data->ona->restarts = ppp_data->mt;
+      /*
+       * send terminate request packet
+       */
+      sig_any_ftx_packet_req(ptype, packet); /* str */
+      /*
+       * start timer
+       */
+      if(ppp_data->ona->restarts > 0)
+        ppp_data->ona->restarts--;
+      sig_any_rt_rrt_req();
+      break;
+    default:
+      TRACE_ERROR( "SIG_ANY_ONA_RXJN_IND unexpected" );
+      arb_discard_packet(packet);
+      break;
+  }
+} /* sig_any_ona_rxjn_ind() */
+
+
+
+/*
++------------------------------------------------------------------------------
+| Function    : sig_any_ona_rcrn_ind
++------------------------------------------------------------------------------
+| Description : Handles the internal signal SIG_ANY_ONA_RCRN_IND
+|
+| Parameters  : ptype  - type of packet
+|               packet - pointer to a generic data descriptor
+|               newFlag - flag
+|
++------------------------------------------------------------------------------
+*/
+GLOBAL void sig_any_ona_rcrn_ind (USHORT ptype, T_desc2* packet, UBYTE newFlag) 
+{ 
+  UBYTE    index;
+  T_desc2* req_packet = NULL;
+
+  TRACE_ISIG( "sig_any_ona_rcrn_ind" );
+  
+  /*
+   * determine ONA-instance
+   */
+  ona_get_inst_index(ptype, &index);
+  ppp_data->ona = & ppp_data->ona_base[index];
+
+  switch( GET_STATE( PPP_SERVICE_ONA ) )
+  {
+    case ONA_CLOSING:
+      arb_discard_packet(packet);
+      break;
+    case ONA_REQ_SENT:
+    case ONA_ACK_SENT:
+      if (ppp_data->ona->failures EQ 0)
+      {
+        /*
+         * protocol not converge
+         */
+        SET_STATE( PPP_SERVICE_ONA, ONA_CLOSING );
+        /*
+         * set error code
+         */
+        if(ppp_data->ppp_cause EQ 0)
+        {
+          switch(ptype)
+          {
+            case DTI_PID_LCP:
+              ppp_data->ppp_cause = PPP_TERM_LCP_NOT_CONVERGE;
+              break;
+            case DTI_PID_IPCP:
+              ppp_data->ppp_cause = PPP_TERM_IPCP_NOT_CONVERGE;
+              break;
+          }
+        }
+        arb_discard_packet(packet);
+        /*
+         * set counter
+         */
+        ppp_data->ona->restarts = ppp_data->mt;
+        /*
+         * request terminate request packet
+         */
+        if (ptype EQ DTI_PID_LCP) 
+        {
+          sig_ona_lcp_str_req(&packet);
+        } 
+        else if (ptype EQ DTI_PID_IPCP) 
+        {
+          sig_ona_ncp_str_req(&packet);
+        }
+        /*
+         * send terminate request
+         */
+        sig_any_ftx_packet_req(ptype, packet); /* str */
+        /*
+         * start timer
+         */
+        if(ppp_data->ona->restarts > 0)
+          ppp_data->ona->restarts--;
+        sig_any_rt_rrt_req();
+      }
+      else
+      {
+        SET_STATE( PPP_SERVICE_ONA, ONA_REQ_SENT );
+        /*
+         * send configure nak packet
+         */
+        sig_any_ftx_packet_req(ptype, packet); /* scn */
+        if (newFlag EQ TRUE)
+        {
+          ppp_data->ona->failures--;
+        }
+      }
+      break;
+    case ONA_ACK_RCVD:
+      if (ppp_data->ona->failures EQ 0)
+      {
+        /*
+         * protocol not converge
+         */
+        SET_STATE( PPP_SERVICE_ONA, ONA_CLOSING );
+        /*
+         * set error code
+         */
+        if(ppp_data->ppp_cause EQ 0)
+        {
+          switch(ptype)
+          {
+            case DTI_PID_LCP:
+              ppp_data->ppp_cause = PPP_TERM_LCP_NOT_CONVERGE;
+              break;
+            case DTI_PID_IPCP:
+              ppp_data->ppp_cause = PPP_TERM_IPCP_NOT_CONVERGE;
+              break;
+          }
+        }
+        arb_discard_packet(packet);
+        /*
+         * set counter
+         */
+        ppp_data->ona->restarts = ppp_data->mt;
+        /*
+         * request terminate request packet
+         */
+        if (ptype EQ DTI_PID_LCP) 
+        {
+          sig_ona_lcp_str_req(&packet);
+        } 
+        else if (ptype EQ DTI_PID_IPCP) 
+        {
+          sig_ona_ncp_str_req(&packet);
+        }
+        /*
+         * send terminate request packet
+         */
+        sig_any_ftx_packet_req(ptype, packet); /* str */
+        /*
+         * start timer
+         */
+        if(ppp_data->ona->restarts > 0)
+          ppp_data->ona->restarts--;
+        sig_any_rt_rrt_req();
+      }
+      else
+      {
+        /*
+         * send configure nak packet
+         */
+        sig_any_ftx_packet_req(ptype, packet); /* scn */
+        if (newFlag EQ TRUE)
+        {
+          ppp_data->ona->failures--;
+          sig_any_rt_rrt_req();
+        }
+      }
+      break;
+    case ONA_OPENED:
+      SET_STATE( PPP_SERVICE_ONA, ONA_REQ_SENT );
+      /*
+       * send This_Layer_Down signal and
+       * request configure request packet
+       */
+      if (ptype EQ DTI_PID_LCP) 
+      {
+        sig_ona_lcp_tld_req();
+        sig_ona_lcp_scr_req(&req_packet);
+      } 
+      else if (ptype EQ DTI_PID_IPCP) 
+      {
+        sig_ona_ncp_tld_req();
+        sig_ona_ncp_scr_req(&req_packet);
+      }
+      ppp_data->ona = & ppp_data->ona_base[index];
+      /*
+       * send configure request packet
+       */
+      sig_any_ftx_packet_req(ptype, req_packet); /* scr */
+      if(ppp_data->ona->restarts > 0)
+        ppp_data->ona->restarts--;
+      if ((newFlag EQ TRUE) && (ppp_data->ona->failures > 0))
+      {
+        ppp_data->ona->failures--;
+      }
+      /*
+       * send configure nak packet
+       */
+      sig_any_ftx_packet_req(ptype, packet); /* scn */
+      /*
+       * start timer
+       */
+      sig_any_rt_rrt_req();
+      break;
+    default:
+      TRACE_ERROR( "SIG_ANY_ONA_RCRN_IND unexpected" );
+      break;
+  }
+} /* sig_any_ona_rcrn_ind() */
+
+
+
+/*
++------------------------------------------------------------------------------
+| Function    : sig_any_ona_rcrp_ind
++------------------------------------------------------------------------------
+| Description : Handles the internal signal SIG_ANY_ONA_RCRP_IND
+|
+| Parameters  : ptype  - type of packet
+|               packet - pointer to a generic data descriptor
+|
++------------------------------------------------------------------------------
+*/
+GLOBAL void sig_any_ona_rcrp_ind (USHORT ptype, T_desc2* packet) 
+{ 
+  UBYTE index;
+  T_desc2* req_packet = NULL;
+  TRACE_ISIG( "sig_any_ona_rcrp_ind" );
+  
+  /*
+   * determine ONA-instance
+   */
+  ona_get_inst_index(ptype, &index);
+  ppp_data->ona = & ppp_data->ona_base[index];
+
+  switch( GET_STATE( PPP_SERVICE_ONA ) )
+  {
+    case ONA_CLOSING:
+      arb_discard_packet(packet);
+      break;
+    case ONA_REQ_SENT:
+    case ONA_ACK_SENT:
+      SET_STATE( PPP_SERVICE_ONA, ONA_ACK_SENT );
+      /*
+       * set counter
+       */
+      ppp_data->ona->failures = ppp_data->mf;
+      /*
+       * send configure acknowledge packet
+       */
+      sig_any_ftx_packet_req(ptype, packet); /* sca */
+      break;
+    case ONA_ACK_RCVD:
+      SET_STATE( PPP_SERVICE_ONA, ONA_OPENED );
+      /*
+       * stop timer
+       */
+      sig_any_rt_srt_req();
+      /*
+       * reset counter
+       */
+      ppp_data->ona->failures = ppp_data->mf;
+      /*
+       * send configure acknowledge packet
+       */
+      sig_any_ftx_packet_req(ptype, packet); /* sca */
+      /*
+       * send This-Layer_Up signal
+       */
+      if (ptype EQ DTI_PID_LCP) 
+      {
+        sig_ona_lcp_tlu_req();
+      } 
+      else if (ptype EQ DTI_PID_IPCP) 
+      {
+        sig_ona_ncp_tlu_req();
+      }
+      break;
+    case ONA_OPENED:
+      SET_STATE( PPP_SERVICE_ONA, ONA_ACK_SENT );
+      /*
+       * send This-Layer-Down signal and
+       * request configure request packet
+       */
+      if (ptype EQ DTI_PID_LCP) 
+      {
+        sig_ona_lcp_tld_req();
+        sig_ona_lcp_scr_req(&req_packet);
+      } 
+      else if (ptype EQ DTI_PID_IPCP) 
+      {
+        sig_ona_ncp_tld_req();
+        sig_ona_ncp_scr_req(&req_packet);
+      }
+      ppp_data->ona = & ppp_data->ona_base[index];
+      /*
+       * send configure request packet
+       */
+      sig_any_ftx_packet_req(ptype, req_packet); /* scr */
+      if(ppp_data->ona->restarts > 0)
+        ppp_data->ona->restarts--;
+      /*
+       * send configure acknowledge packet
+       */
+      sig_any_ftx_packet_req(ptype, packet); /* sca */
+      /* 
+       * restart timer
+       */
+      sig_any_rt_rrt_req();
+      break;
+    default:
+      TRACE_ERROR( "SIG_ANY_ONA_RCRP_IND unexpected" );
+      arb_discard_packet(packet);
+      break;
+  }
+} /* sig_any_ona_rcrp_ind() */
+
+
+
+/*
++------------------------------------------------------------------------------
+| Function    : sig_any_ona_rcn_ind
++------------------------------------------------------------------------------
+| Description : Handles the internal signal SIG_ANY_ONA_RCN_IND
+|
+| Parameters  : ptype  - type of packet
+|               packet - pointer to a generic data descriptor
+|
++------------------------------------------------------------------------------
+*/
+GLOBAL void sig_any_ona_rcn_ind (USHORT ptype, T_desc2* packet) 
+{ 
+  UBYTE index;
+  TRACE_ISIG( "sig_any_ona_rcn_ind" );
+  
+  /*
+   * determine ONA-instance
+   */
+  ona_get_inst_index(ptype, &index);
+  ppp_data->ona = & ppp_data->ona_base[index];
+
+  switch( GET_STATE( PPP_SERVICE_ONA ) )
+  {
+    case ONA_CLOSING:
+      arb_discard_packet(packet);
+      break;
+    case ONA_REQ_SENT:
+    case ONA_ACK_SENT:
+      /*
+       * reset counter
+       */
+      ppp_data->ona->restarts = ppp_data->mc;
+      /*
+       * send configure request packet
+       */
+      sig_any_ftx_packet_req(ptype, packet); /* scr */
+      /*
+       * start timer
+       */
+      if(ppp_data->ona->restarts > 0)
+        ppp_data->ona->restarts--;
+      sig_any_rt_rrt_req();
+      break;
+    case ONA_ACK_RCVD:
+      SET_STATE( PPP_SERVICE_ONA, ONA_REQ_SENT );
+      /*
+       * send configure request packet
+       */
+      sig_any_ftx_packet_req(ptype, packet); /* scr */
+      /*
+       * start timer
+       */
+      sig_any_rt_rrt_req();
+      break;
+    case ONA_OPENED:
+      SET_STATE( PPP_SERVICE_ONA, ONA_REQ_SENT );
+      /*
+       * send This-Layer-Down signal
+       */
+      if (ptype EQ DTI_PID_LCP) 
+      {
+        sig_ona_lcp_tld_req();
+      } 
+      else if (ptype EQ DTI_PID_IPCP) 
+      {
+        sig_ona_ncp_tld_req();
+      }
+      ppp_data->ona = & ppp_data->ona_base[index];
+      /*
+       * send configure request packet
+       */
+      sig_any_ftx_packet_req(ptype, packet); /* scr */
+      /*
+       * start timer
+       */
+      if(ppp_data->ona->restarts > 0)
+        ppp_data->ona->restarts--;
+      sig_any_rt_rrt_req();
+      break;
+    default:
+      TRACE_ERROR( "SIG_ANY_ONA_RCN_IND unexpected" );
+      arb_discard_packet(packet);
+      break;
+  }
+} /* sig_any_ona_rcn_ind() */
+
+
+
+/*
++------------------------------------------------------------------------------
+| Function    : sig_any_ona_rca_ind
++------------------------------------------------------------------------------
+| Description : Handles the internal signal SIG_ANY_ONA_RCA_IND
+|
+| Parameters  : ptype  - type of packet
+|
++------------------------------------------------------------------------------
+*/
+GLOBAL void sig_any_ona_rca_ind (USHORT ptype) 
+{ 
+  UBYTE index;
+  T_desc2* temp_desc = NULL;
+
+  TRACE_ISIG( "sig_any_ona_rca_ind" );
+  
+  /*
+   * determine ONA-instance
+   */
+  ona_get_inst_index(ptype, &index);
+  ppp_data->ona = & ppp_data->ona_base[index];
+
+  switch( GET_STATE( PPP_SERVICE_ONA ) )
+  {
+    case ONA_CLOSING:
+    case ONA_ACK_RCVD:
+    case ONA_OPENED:
+      break;
+    case ONA_REQ_SENT:
+      if(ppp_data->ona->loops EQ 0)
+      {
+        /*
+         * protocol not converge
+         */
+        SET_STATE( PPP_SERVICE_ONA, ONA_CLOSING );
+        /*
+         * set error code
+         */
+        if(ppp_data->ppp_cause EQ 0)
+        {
+          switch(ptype)
+          {
+            case DTI_PID_LCP:
+              ppp_data->ppp_cause = PPP_TERM_LCP_NOT_CONVERGE;
+              break;
+            case DTI_PID_IPCP:
+              ppp_data->ppp_cause = PPP_TERM_IPCP_NOT_CONVERGE;
+              break;
+          }
+        }
+        /*
+         * set counter
+         */
+        ppp_data->ona->restarts = ppp_data->mt;
+        /*
+         * request terminate request packet
+         */
+        if (ptype EQ DTI_PID_LCP) 
+        {
+          sig_ona_lcp_str_req(&temp_desc);
+        } 
+        else if (ptype EQ DTI_PID_IPCP) 
+        {
+          sig_ona_ncp_str_req(&temp_desc);
+        }
+        /*
+         * send terminate request
+         */
+        sig_any_ftx_packet_req(ptype, temp_desc); /* str */
+        /*
+         * start timer
+         */
+        if(ppp_data->ona->restarts > 0)
+          ppp_data->ona->restarts--;
+        sig_any_rt_rrt_req();
+      }
+      else
+      {
+        SET_STATE( PPP_SERVICE_ONA, ONA_ACK_RCVD );
+        /*
+         * reset counters
+         */
+        ppp_data->ona->restarts = ppp_data->mc;
+        ppp_data->ona->loops--;
+        /*
+         * start timer
+         */
+        sig_any_rt_rrt_req();
+      }
+      break;
+
+    case ONA_ACK_SENT:
+      if(ppp_data->ona->loops EQ 0)
+      {
+        /*
+         * protocol not converge
+         */
+        SET_STATE( PPP_SERVICE_ONA, ONA_CLOSING );
+        /*
+         * set error code
+         */
+        if(ppp_data->ppp_cause EQ 0)
+        {
+          switch(ptype)
+          {
+            case DTI_PID_LCP:
+              ppp_data->ppp_cause = PPP_TERM_LCP_NOT_CONVERGE;
+              break;
+            case DTI_PID_IPCP:
+              ppp_data->ppp_cause = PPP_TERM_IPCP_NOT_CONVERGE;
+              break;
+          }
+        }
+        /*
+         * set counter
+         */
+        ppp_data->ona->restarts = ppp_data->mt;
+        /*
+         * request terminate request packet
+         */
+        if (ptype EQ DTI_PID_LCP) 
+        {
+          sig_ona_lcp_str_req(&temp_desc);
+        } 
+        else if (ptype EQ DTI_PID_IPCP) 
+        {
+          sig_ona_ncp_str_req(&temp_desc);
+        }
+        /*
+         * send terminate request
+         */
+        sig_any_ftx_packet_req(ptype, temp_desc); /* str */
+        /*
+         * start timer
+         */
+        if(ppp_data->ona->restarts > 0)
+          ppp_data->ona->restarts--;
+        sig_any_rt_rrt_req();
+      }
+      else
+      {
+        SET_STATE( PPP_SERVICE_ONA, ONA_OPENED );
+        /*
+         * stop timer
+         */
+        sig_any_rt_srt_req();
+        /*
+         * reset counter
+         */
+        ppp_data->ona->restarts = ppp_data->mc;
+        ppp_data->ona->loops--;
+        /* 
+         * send This_Layer_Up signal
+         */
+        if (ptype EQ DTI_PID_LCP) 
+        {
+          sig_ona_lcp_tlu_req();
+        } 
+        else if (ptype EQ DTI_PID_IPCP) 
+        {
+          sig_ona_ncp_tlu_req();
+        }
+      }
+      break;
+
+    default:
+      TRACE_ERROR( "SIG_ANY_ONA_RCA_IND unexpected" );
+      break;
+  }
+} /* sig_any_ona_rca_ind() */
+
+
+
+/*
++------------------------------------------------------------------------------
+| Function    : sig_any_ona_rxr_ind
++------------------------------------------------------------------------------
+| Description : Handles the internal signal SIG_ANY_ONA_RXR_IND
+|
+| Parameters  : ptype  - type of packet
+|               packet - pointer to a generic data descriptor
+|
++------------------------------------------------------------------------------
+*/
+GLOBAL void sig_any_ona_rxr_ind (USHORT ptype, T_desc2* packet) 
+{ 
+  UBYTE index;
+  TRACE_ISIG( "sig_any_ona_rxr_ind" );
+  
+  /*
+   * determine ONA-instance
+   */
+  ona_get_inst_index(ptype, &index);
+  ppp_data->ona = & ppp_data->ona_base[index];
+
+  switch( GET_STATE( PPP_SERVICE_ONA ) )
+  {
+    case ONA_CLOSING:
+    case ONA_REQ_SENT:
+    case ONA_ACK_RCVD:
+    case ONA_ACK_SENT:
+      arb_discard_packet(packet);
+      break;
+    case ONA_OPENED:
+      /*
+       * send echo reply packet
+       */
+      sig_any_ftx_packet_req(ptype, packet); /* ser */
+      break;
+    default:
+      TRACE_ERROR( "SIG_ANY_ONA_RXR_IND unexpected" );
+      arb_discard_packet(packet);
+      break;
+  }
+} /* sig_any_ona_rxr_ind() */