diff src/g23m-fad/l2r/l2r_mgtp.c @ 174:90eb61ecd093

src/g23m-fad: initial import from TCS3.2/LoCosto
author Mychaela Falconia <falcon@freecalypso.org>
date Wed, 12 Oct 2016 05:40:46 +0000
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/g23m-fad/l2r/l2r_mgtp.c	Wed Oct 12 05:40:46 2016 +0000
@@ -0,0 +1,881 @@
+/*
++-----------------------------------------------------------------------------
+|  Project :  CSD (8411)
+|  Modul   :  L2r_mgtp.c
++-----------------------------------------------------------------------------
+|  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 defines the functions for processing
+|             of incomming primitives for the component
+|             Radio Link Protocol of the base station
++-----------------------------------------------------------------------------
+*/
+
+#ifndef L2R_MGTP_C
+#define L2R_MGTP_C
+#endif
+
+#define ENTITY_L2R
+
+/*==== INCLUDES ===================================================*/
+
+#include <string.h>
+#include "typedefs.h"
+#include "pconst.cdg"
+#include "vsi.h"
+#include "macdef.h"
+#include "custom.h"
+#include "gsm.h"
+#include "cus_l2r.h"
+#include "cnf_l2r.h"
+#include "mon_l2r.h"
+#include "prim.h"
+#include "pei.h"
+#include "tok.h"
+#include "dti.h"      /* functionality of the dti library */
+
+#include "cl_ribu.h"
+#include "l2r.h"
+
+/*==== CONST =======================================================*/
+
+/*==== TYPES =======================================================*/
+
+/*==== VAR EXPORT ==================================================*/
+
+/*==== VAR LOCAL ===================================================*/
+
+/*==== FUNCTIONS ===================================================*/
+
+GLOBAL void mgt_l2r_connect_cnf(UBYTE nack)
+{
+  PALLOC (l2r_connect_cnf, L2R_CONNECT_CNF);
+  l2r_connect_cnf->ack_flg = nack;
+  PSENDX (CTRL, l2r_connect_cnf);
+}
+
+LOCAL void snd_rlp_connect_res(UBYTE nack)
+{
+  PALLOC (rlp_connect_res, RLP_CONNECT_RES);
+  rlp_connect_res->ack_flg = nack;
+  PSENDX (RLP, rlp_connect_res);
+}
+
+/*
++------------------------------------------------------------------------------
+|  Function    : mgt_l2r_activate_req
++------------------------------------------------------------------------------
+|  Description : Process primitive L2R_ACTIVATE_REQ  received from the Controller
+|
+|  Parameters  : l2r_activate_req -
+|
+|
+|  Return      : -
++------------------------------------------------------------------------------
+*/
+
+
+GLOBAL void mgt_l2r_activate_req(T_L2R_ACTIVATE_REQ *l2r_activate_req)
+{
+  USHORT BytesPerPrim; /* Number of bytes per primitive */
+  T_L2R_DATA *l2r_data_orig;
+
+  TRACE_FUNCTION ("mgt_l2r_activate_req()");
+  PACCESS        (l2r_activate_req);
+
+  /***************************************
+   *
+   *  Initialize Shared Fax/Data memory  *
+   *
+   ***************************************
+   */
+
+  l2r_data_mode = NONTRANSP;
+
+  l2r_data_orig = l2r_data;
+
+  if (l2r_data_magic_num NEQ L2R_DATA_MAGIC_NUM)
+  {
+    l2r_data = &l2r_data_base[0];
+  }
+
+  memset (l2r_data, 0, sizeof (T_L2R_DATA));
+
+  mgt_init(&l2r_data->mgt);
+  dn_init(&l2r_data->dn);
+  up_init(&l2r_data->up);
+
+  l2r_data_magic_num = L2R_DATA_MAGIC_NUM; /* memory is initialized */
+
+  l2r_data = l2r_data_orig;
+
+  switch (GET_STATE (MGT))
+  {
+  case MGT_ATTACHED:
+    {
+    PPASS (l2r_activate_req, l2r_activate_cnf, L2R_ACTIVATE_CNF);
+    l2r_activate_cnf->ack_flg = L2R_NAK;
+    PSENDX (CTRL, l2r_activate_cnf);
+    break;
+    }
+
+  case MGT_DETACHED:
+    if (mgt_checkpar(l2r_activate_req) EQ FALSE) /* invalid parameter values */
+    {
+      PPASS (l2r_activate_req, l2r_activate_cnf, L2R_ACTIVATE_CNF);
+      l2r_activate_cnf->ack_flg = L2R_NAK;
+      PSENDX (CTRL, l2r_activate_cnf);
+      return;
+    }
+
+    {
+    T_MGT *dmgt = &l2r_data->mgt;
+
+    PALLOC (rlp_attach_req, RLP_ATTACH_REQ);
+
+    rlp_attach_req->k_ms_iwf        = l2r_activate_req->k_ms_iwf;
+    rlp_attach_req->k_iwf_ms        = l2r_activate_req->k_iwf_ms;
+    rlp_attach_req->t1              = l2r_activate_req->t1;
+    rlp_attach_req->t2              = l2r_activate_req->t2;
+    rlp_attach_req->n2              = l2r_activate_req->n2;
+    rlp_attach_req->pt              = l2r_activate_req->pt;
+    rlp_attach_req->p1              = l2r_activate_req->p1;
+    rlp_attach_req->p2              = l2r_activate_req->p2;
+    rlp_attach_req->bytes_per_prim  = l2r_activate_req->bytes_per_prim;
+
+    switch (l2r_activate_req->uil2p)
+    {
+    case L2R_COPnoFlCt:
+      dmgt->FlowCtrlUsed = FALSE;
+      break;
+    case L2R_ISO6429:
+      dmgt->FlowCtrlUsed = TRUE;
+      break;
+    }
+
+    switch (l2r_activate_req->rate)
+    {
+    case L2R_FULLRATE_14400:
+      rlp_attach_req->rate = RLP_FULLRATE_14400;
+      dmgt->FrameSize = RLP_FRAME_SIZE_LONG;
+      break;
+
+    case L2R_FULLRATE_9600:
+      rlp_attach_req->rate = RLP_FULLRATE_9600;
+      dmgt->FrameSize = RLP_FRAME_SIZE_SHORT;
+      break;
+
+    case L2R_FULLRATE_4800:
+      rlp_attach_req->rate = RLP_FULLRATE_4800;
+      dmgt->FrameSize = RLP_FRAME_SIZE_SHORT;
+      break;
+
+    case L2R_HALFRATE_4800:
+      rlp_attach_req->rate = RLP_HALFRATE_4800;
+      dmgt->FrameSize = RLP_FRAME_SIZE_SHORT;
+      break;
+    }
+
+    BytesPerPrim        = l2r_activate_req->bytes_per_prim;
+    dmgt->FramesPerPrim = (BytesPerPrim + dmgt->FrameSize - 1) / dmgt->FrameSize;
+    dmgt->RiBuSize      = ((l2r_activate_req->buffer_size + BytesPerPrim - 1) / BytesPerPrim) + 1;
+
+    if (dmgt->RiBuSize < MIN_RIBU_SIZE)
+    {
+      dmgt->RiBuSize = MIN_RIBU_SIZE;
+    }
+
+    rlp_attach_req->p0 = RLP_COMP_DIR_NONE;
+    PSENDX (RLP, rlp_attach_req);
+    SET_STATE (CONIND, IW_IDLE);
+    SET_STATE (MGT, MGT_PENDING_ATTACH);
+    break;
+    }
+  }
+  PFREE (l2r_activate_req);
+}
+
+/*
++------------------------------------------------------------------------------
+|  Function    : mgt_l2r_deactivate_req
++------------------------------------------------------------------------------
+|  Description : Process primitive L2R_DEACTIVATE_REQ received from the Controller.
+|
+|  Parameters  : l2r_deactivate_req -
+|
+|
+|  Return      : -
++------------------------------------------------------------------------------
+*/
+
+GLOBAL void mgt_l2r_deactivate_req
+                  (
+                    T_L2R_DEACTIVATE_REQ *l2r_deactivate_req
+                  )
+{
+  TRACE_FUNCTION ("mgt_l2r_deactivate_req()");
+  PACCESS        (l2r_deactivate_req);
+
+  if (GET_STATE (MGT) NEQ MGT_DETACHED)
+  {
+    PALLOC (rlp_detach_req, RLP_DETACH_REQ);
+    mgt_deinit_connection();
+    PSENDX (RLP, rlp_detach_req);
+    SET_STATE (MGT, MGT_PENDING_DETACH);
+  }
+
+  PFREE (l2r_deactivate_req);
+
+  if (GET_STATE (DTI) NEQ DTI_CLOSED)
+  {
+    dti_close(l2r_hDTI, L2R_DTI_UP_DEF_INSTANCE, L2R_DTI_UP_INTERFACE, L2R_DTI_UP_CHANNEL, FALSE);
+    SET_STATE (DTI, DTI_CLOSED);
+  }
+}
+
+/*
++------------------------------------------------------------------------------
+|  Function    : mgt_l2r_connect_req
++------------------------------------------------------------------------------
+|  Description : Process primitive L2R_CONNECT_REQ received from the Controller.
+|
+|  Parameters  : l2r_connect_req -
+|
+|
+|  Return      : -
++------------------------------------------------------------------------------
+*/
+
+GLOBAL void mgt_l2r_connect_req(T_L2R_CONNECT_REQ *l2r_connect_req)
+{
+  TRACE_FUNCTION ("mgt_l2r_connect_req()");
+  PACCESS        (l2r_connect_req);
+
+  if (GET_STATE (MGT) EQ MGT_ATTACHED)
+  {
+    PALLOC (rlp_connect_req, RLP_CONNECT_REQ);
+    PSENDX (RLP, rlp_connect_req);
+    SET_STATE (MGT, MGT_PENDING_CONNECT);
+  }
+  PFREE (l2r_connect_req);
+}
+
+/*
++------------------------------------------------------------------------------
+|  Function    : mgt_l2r_disc_req
++------------------------------------------------------------------------------
+|  Description : Process primitive L2R_DISC_REQ received from the Controller.
+|
+|  Parameters  : l2r_disc_req -
+|
+|
+|  Return      : -
++------------------------------------------------------------------------------
+*/
+
+GLOBAL void mgt_l2r_disc_req(T_L2R_DISC_REQ *l2r_disc_req)
+{
+  TRACE_FUNCTION ("mgt_l2r_disc_req()");
+  PACCESS        (l2r_disc_req);
+
+  switch (GET_STATE (MGT))
+  {
+  case MGT_DETACHED:
+  case MGT_PENDING_ATTACH:
+  case MGT_ATTACHED:
+    break;
+
+  default:
+    {
+    PALLOC (rlp_disc_req, RLP_DISC_REQ);
+    PSENDX (RLP, rlp_disc_req);
+    mgt_deinit_connection();
+    SET_STATE (MGT, MGT_DISCONNECT_INITIATED);
+    break;
+    }
+  }
+  PFREE (l2r_disc_req);
+}
+
+LOCAL void send_l2r_dti_cnf(U8 dti_conn, U32 link_id)
+{
+  PALLOC (l2r_dti_cnf, L2R_DTI_CNF);
+  l2r_dti_cnf->dti_conn = dti_conn;
+  l2r_dti_cnf->link_id = link_id;
+  PSENDX (CTRL, l2r_dti_cnf);
+}
+
+/*
++------------------------------------------------------------------------------
+|  Function    : mgt_l2r_dti_req
++------------------------------------------------------------------------------
+|  Description : Process primitive L2R_DTI_REQ received from the Controller.
+|
+|  Parameters  : l2r_dti_req -
+|
+|
+|  Return      : -
++------------------------------------------------------------------------------
+*/
+
+
+GLOBAL void mgt_l2r_dti_req(T_L2R_DTI_REQ *l2r_dti_req)
+{
+  BOOL isOK;
+
+  TRACE_FUNCTION ("mgt_l2r_dti_req()");
+  PACCESS        (l2r_dti_req);
+
+  switch (GET_STATE (MGT))
+  {
+  case MGT_CONNECTED:
+    switch (l2r_dti_req->dti_conn)
+    {
+    case L2R_CONNECT_DTI:
+      l2r_data->mgt.link_id = l2r_dti_req->link_id;
+
+      if (GET_STATE (DTI) NEQ DTI_CLOSED)
+      {
+        dti_close(l2r_hDTI, L2R_DTI_UP_DEF_INSTANCE, L2R_DTI_UP_INTERFACE, L2R_DTI_UP_CHANNEL, FALSE);
+        SET_STATE (DTI, DTI_CLOSED);
+      }
+      /*
+       * open new dti library communication channel
+       */
+      INIT_STATE (DTI, DTI_SETUP);
+      sig_mgt_up_dti_conn_setup (l2r_dti_req->link_id);
+      sig_mgt_dn_dti_conn_setup (l2r_dti_req->link_id);
+
+      isOK = dti_open (
+        l2r_hDTI,
+        L2R_DTI_UP_DEF_INSTANCE,
+        L2R_DTI_UP_INTERFACE,
+        L2R_DTI_UP_CHANNEL,
+        L2R_DTI_UPLINK_QUEUE_SIZE,
+        l2r_dti_req->dti_direction,
+        DTI_QUEUE_UNUSED,
+        DTI_VERSION_10,
+        (U8*)l2r_dti_req->entity_name,
+        l2r_dti_req->link_id
+        );
+
+      if (isOK EQ FALSE)
+      {
+        send_l2r_dti_cnf(L2R_DISCONNECT_DTI, l2r_dti_req->link_id);
+        SET_STATE (DTI, DTI_CLOSED);
+        PFREE(l2r_dti_req);
+        return;
+      }
+      PFREE(l2r_dti_req);
+      /*
+       * L2R_DTI_CNF will be sent in sig_dti_mgt_connection_opened_ind
+       */
+      return;
+
+    case L2R_DISCONNECT_DTI:
+      l2r_data->up.DtiConnected = FALSE;
+      l2r_data->dn.DtiConnected = FALSE;
+      /*
+      TRACE_EVENT_P2 ("Air interface: Received:%d Sent:%d", l2r_data->dn.RcvdChar, l2r_data->up.SentChar);
+      */
+      if (GET_STATE (DTI) NEQ DTI_CLOSED)
+      {
+        dti_close(l2r_hDTI, L2R_DTI_UP_DEF_INSTANCE, L2R_DTI_UP_INTERFACE, L2R_DTI_UP_CHANNEL, FALSE);
+        SET_STATE (DTI, DTI_CLOSED);
+      }
+      TRACE_EVENT("MGT: DTI snatched away by ACI");
+      break;
+    }
+    send_l2r_dti_cnf(l2r_dti_req->dti_conn, l2r_dti_req->link_id);
+    break;
+
+  default:
+    break;
+  }
+  PFREE(l2r_dti_req);
+}
+
+
+/*
++------------------------------------------------------------------------------
+|  Function    : sig_dti_mgt_connection_opened_ind
++------------------------------------------------------------------------------
+| Description : Handles the DTILIB callback call DTI_REASON_CONNECTION_OPENED
+|
+|               This signal means that a dti connection has been opened
+|               successfully.
+|               Since it is called directy from the dtilib callback function
+|               it is handled like a primitive, here..
+|
+|  Parameters  : -
+|  Return      : -
++------------------------------------------------------------------------------
+*/
+GLOBAL void sig_dti_mgt_connection_opened_ind()
+{
+  TRACE_FUNCTION ("sig_dti_mgt_connection_opened_ind()");
+
+  if (GET_STATE (DTI) EQ DTI_SETUP)
+  {
+    send_l2r_dti_cnf(L2R_CONNECT_DTI, l2r_data->mgt.link_id);
+    sig_mgt_up_dti_conn_open();
+
+    l2r_data->dn.DtiConnected = TRUE;
+    TRACE_EVENT("MGT: DTI received from ACI");
+    SET_STATE (DTI, DTI_IDLE);
+  }
+}
+
+/*
++------------------------------------------------------------------------------
+|  Function    : sig_dti_mgt_connection_closed_ind
++------------------------------------------------------------------------------
+| Description : Handles the DTILIB callback call DTI_REASON_CONNECTION_CLOSED
+|
+|               This signal means that a dti connection has been closed
+|               Since it is called directy from the dtilib callback function
+|               it is handled like a primitive, here..
+|
+|  Parameters  : -
+|  Return      : -
++------------------------------------------------------------------------------
+*/
+GLOBAL void sig_dti_mgt_connection_closed_ind()
+{
+  TRACE_FUNCTION ("sig_dti_mgt_connection_closed_ind()");
+
+  if (GET_STATE (DTI) NEQ DTI_CLOSED)
+  {
+    PALLOC (l2r_dti_ind, L2R_DTI_IND);
+
+    SET_STATE (DTI, DTI_CLOSED);
+
+    l2r_data->up.DtiConnected = FALSE;
+    l2r_data->dn.DtiConnected = FALSE;
+
+    l2r_dti_ind->link_id = l2r_data->mgt.link_id;
+    TRACE_EVENT("MGT: DTI passed to ACI");
+    PSENDX (CTRL, l2r_dti_ind);
+  }
+}
+
+/*
++------------------------------------------------------------------------------
+|  Function    : mgt_rlp_connect_ind
++------------------------------------------------------------------------------
+|  Description : Process primitive RLP_CONNECT_IND received from RLP.
+|
+|  Parameters  : rlp_connect_ind -
+|
+|
+|  Return      :
++------------------------------------------------------------------------------
+*/
+
+GLOBAL void mgt_rlp_connect_ind(T_RLP_CONNECT_IND *rlp_connect_ind)
+{
+  TRACE_FUNCTION ("mgt_rlp_connect_ind()");
+  PACCESS        (rlp_connect_ind);
+
+  switch (GET_STATE (MGT))
+  {
+  case MGT_PENDING_ATTACH:
+    SET_STATE (CONIND, IW_WAIT);
+    break;
+
+  case MGT_ATTACHED:
+    snd_rlp_connect_res(RLP_ACK);
+    mgt_init_connection(TRUE);
+    SET_STATE (MGT, MGT_CONNECTED);
+    break;
+
+  case MGT_PENDING_CONNECT:
+    snd_rlp_connect_res(RLP_ACK);
+    mgt_init_connection(FALSE);
+    SET_STATE (MGT, MGT_CONNECTED);
+    break;
+  }
+  PFREE (rlp_connect_ind);
+}
+
+/*
++------------------------------------------------------------------------------
+|  Function    : mgt_rlp_connect_cnf
++------------------------------------------------------------------------------
+|  Description : Process primitive RLP_CONNECT_CNF received from RLP.
+|
+|  Parameters  : rlp_connect_cnf -
+|
+|
+|  Return      : -
++------------------------------------------------------------------------------
+*/
+
+GLOBAL void mgt_rlp_connect_cnf(T_RLP_CONNECT_CNF *rlp_connect_cnf)
+{
+  TRACE_FUNCTION ("mgt_rlp_connect_cnf()");
+  PACCESS        (rlp_connect_cnf);
+
+  if (GET_STATE (MGT) EQ MGT_PENDING_CONNECT)
+  {
+    switch (rlp_connect_cnf->ack_flg)
+    {
+    case RLP_ACK:
+      mgt_init_connection(FALSE);
+      SET_STATE (MGT, MGT_CONNECTED);
+      break;
+
+    case RLP_NAK:
+      mgt_l2r_connect_cnf(L2R_NAK);
+      SET_STATE (MGT, MGT_ATTACHED);
+      break;
+    }
+  }
+  PFREE (rlp_connect_cnf);
+}
+
+/*
++------------------------------------------------------------------------------
+|  Function    : mgt_rlp_disc_ind
++------------------------------------------------------------------------------
+|  Description : Process primitive RLP_DISC_IND received from RLP.
+|
+|  Parameters  : rlp_disc_ind -
+|
+|
+|  Return      : -
++------------------------------------------------------------------------------
+*/
+
+
+GLOBAL void mgt_rlp_disc_ind(T_RLP_DISC_IND *rlp_disc_ind)
+{
+  TRACE_FUNCTION ("mgt_rlp_disc_ind()");
+  PACCESS        (rlp_disc_ind);
+
+  switch (GET_STATE (MGT))
+  {
+  case MGT_PENDING_CONNECT:
+    mgt_l2r_connect_cnf(L2R_NAK);
+    SET_STATE (MGT, MGT_ATTACHED);
+    break;
+
+  case MGT_CONNECTED:
+    {
+    PALLOC (l2r_disc_ind, L2R_DISC_IND);
+    PSENDX (CTRL, l2r_disc_ind);
+    }
+    mgt_deinit_connection();
+    SET_STATE (MGT, MGT_ATTACHED);
+    break;
+  }
+  PFREE (rlp_disc_ind);
+}
+
+/*
++------------------------------------------------------------------------------
+|  Function    : mgt_rlp_disc_cnf
++------------------------------------------------------------------------------
+|  Description : Process primitive RLP_DISC_CNF received from RLP.
+|
+|  Parameters  : rlp_disc_cnf -
+|
+|
+|  Return      : -
++------------------------------------------------------------------------------
+*/
+
+
+GLOBAL void mgt_rlp_disc_cnf
+                  (
+                    T_RLP_DISC_CNF       *rlp_disc_cnf
+                  )
+{
+  TRACE_FUNCTION ("mgt_rlp_disc_cnf()");
+  PACCESS        (rlp_disc_cnf);
+
+  switch (GET_STATE (MGT))
+  {
+  case MGT_DISCONNECT_INITIATED:
+    {
+     /*
+      * processing for state MGT_DISCONNECT_INITIATED
+      */
+      PALLOC (l2r_disc_cnf, L2R_DISC_CNF);
+      PSENDX (CTRL, l2r_disc_cnf);
+      SET_STATE (MGT, MGT_ATTACHED);
+      break;
+    }
+  }
+  PFREE (rlp_disc_cnf);
+}
+
+/*
++------------------------------------------------------------------------------
+|  Function    : mgt_rlp_reset_ind
++------------------------------------------------------------------------------
+|  Description : Process primitive RLP_RESET_IND received from RLP.
+|
+|  Parameters  : rlp_reset_ind -
+|
+|
+|  Return      : -
++------------------------------------------------------------------------------
+*/
+
+
+GLOBAL void mgt_rlp_reset_ind
+                  (
+                    T_RLP_RESET_IND      *rlp_reset_ind
+                  )
+{
+  TRACE_FUNCTION ("mgt_rlp_reset_ind()");
+  PACCESS        (rlp_reset_ind);
+
+  switch (GET_STATE (MGT))
+  {
+  case MGT_CONNECTED:
+    {
+     /*
+      * processing for state MGT_CONNECTED
+      */
+      {
+        PALLOC (l2r_reset_ind, L2R_RESET_IND);
+        PSENDX (CTRL, l2r_reset_ind);
+      }
+      sig_mgt_up_clear_req();
+      sig_mgt_dn_clear_req();
+
+      {
+        PALLOC (rlp_reset_res, RLP_RESET_RES);
+        PSENDX (RLP, rlp_reset_res);
+      }
+      sig_mgt_dn_reconn_req();
+      break;
+    }
+  }
+  PFREE (rlp_reset_ind);
+}
+
+/*
++------------------------------------------------------------------------------
+|  Function    : mgt_rlp_reset_cnf
++------------------------------------------------------------------------------
+|  Description : Process primitive RLP_RESET_CNF received from RLP.
+|
+|  Parameters  : rlp_reset_cnf -
+|
+|
+|  Return      : -
++------------------------------------------------------------------------------
+*/
+
+
+GLOBAL void mgt_rlp_reset_cnf
+                  (
+                    T_RLP_RESET_CNF      *rlp_reset_cnf
+                  )
+{
+  TRACE_FUNCTION ("mgt_rlp_reset_cnf()");
+  PACCESS        (rlp_reset_cnf);
+  /*
+   * RLP_RESET_REQ is never used.
+   * Therefore RLP_RESET_CNF does not need to be handled.
+   */
+  PFREE (rlp_reset_cnf);
+}
+
+/*
++------------------------------------------------------------------------------
+|  Function    :  mgt_rlp_ui_ind
++------------------------------------------------------------------------------
+|  Description : Process primitive RLP_UI_IND received from RLP.
+|
+|  Parameters  : rlp_ui_ind -
+|
+|
+|  Return      : -
++------------------------------------------------------------------------------
+*/
+
+
+GLOBAL void mgt_rlp_ui_ind(T_RLP_UI_IND *rlp_ui_ind)
+{
+  TRACE_FUNCTION ("mgt_rlp_ui_ind()");
+  PACCESS        (rlp_ui_ind);
+  /*
+  * processing for all states
+  * unnumbered information is ignored by L2R
+  */
+  PFREE (rlp_ui_ind);
+}
+
+/*
++------------------------------------------------------------------------------
+|  Function    : mgt_rlp_xid_ind
++------------------------------------------------------------------------------
+|  Description : Process primitive RLP_XID_IND received from RLP.
+|
+|  Parameters  : rlp_xid_ind -
+|
+|
+|  Return      : -
++------------------------------------------------------------------------------
+*/
+
+GLOBAL void mgt_rlp_xid_ind(T_RLP_XID_IND *rlp_xid_ind)
+{
+  UBYTE state;
+  TRACE_FUNCTION ("mgt_rlp_xid_ind()");
+  PACCESS        (rlp_xid_ind);
+
+  state = GET_STATE (MGT);
+  switch (state)
+  {
+  case MGT_PENDING_ATTACH:
+  case MGT_ATTACHED:
+  case MGT_PENDING_CONNECT:
+  case MGT_CONNECTED:
+    {
+     /*
+      * processing for states MGT_PENDING_ATTACH, MGT_ATTACHED,
+      * MGT_PENDING_CONNECT and MGT_CONNECTED
+      */
+
+      PALLOC (l2r_xid_ind, L2R_XID_IND);
+
+      l2r_xid_ind->rlp_vers = rlp_xid_ind->rlp_vers;
+      l2r_xid_ind->k_ms_iwf = rlp_xid_ind->k_ms_iwf;
+      l2r_xid_ind->k_iwf_ms = rlp_xid_ind->k_iwf_ms;
+      l2r_xid_ind->t1       = rlp_xid_ind->t1;
+      l2r_xid_ind->t2       = rlp_xid_ind->t2;
+      l2r_xid_ind->n2       = rlp_xid_ind->n2;
+      l2r_xid_ind->pt       = rlp_xid_ind->pt;
+      l2r_xid_ind->p0       = rlp_xid_ind->p0;
+      l2r_xid_ind->p1       = rlp_xid_ind->p1;
+      l2r_xid_ind->p2       = rlp_xid_ind->p2;
+
+      PSENDX (CTRL, l2r_xid_ind);
+      if (state EQ MGT_PENDING_ATTACH)
+      {
+        {
+          PALLOC (l2r_activate_cnf, L2R_ACTIVATE_CNF);
+          l2r_activate_cnf->ack_flg = L2R_ACK;
+          PSENDX (CTRL, l2r_activate_cnf);
+        }
+
+        switch (GET_STATE (CONIND))
+        {
+        case IW_IDLE:
+          {
+            SET_STATE (MGT, MGT_ATTACHED);
+            break;
+          }
+        case IW_WAIT:
+          snd_rlp_connect_res(RLP_ACK);
+          mgt_init_connection(TRUE);
+          SET_STATE (MGT, MGT_CONNECTED);
+          break;
+        }
+      }
+      break;
+    }
+  }
+  PFREE (rlp_xid_ind);
+}
+
+/*
++------------------------------------------------------------------------------
+|  Function    : mgt_rlp_error_ind
++------------------------------------------------------------------------------
+|  Description : Process primitive RLP_ERROR_IND received from RLP.
+|
+|  Parameters  : rlp_error_ind -
+|
+|
+|  Return      : -
++------------------------------------------------------------------------------
+*/
+
+GLOBAL void mgt_rlp_error_ind(T_RLP_ERROR_IND *rlp_error_ind)
+{
+  TRACE_FUNCTION ("mgt_rlp_error_ind()");
+  PACCESS        (rlp_error_ind);
+
+  mgt_send_l2r_error_ind(rlp_error_ind->cause);
+  SET_STATE (MGT, MGT_PERMANENT_ERROR);
+  PFREE (rlp_error_ind);
+}
+
+/*
++------------------------------------------------------------------------------
+|  Function    : mgt_rlp_statistic_ind
++------------------------------------------------------------------------------
+|  Description : Process primitive RLP_STATISTIC_IND received from RLP.
+|
+|  Parameters  : rlp_statistic_ind -
+|
+|
+|  Return      :
++------------------------------------------------------------------------------
+*/
+
+GLOBAL void mgt_rlp_statistic_ind
+                  (
+                    T_RLP_STATISTIC_IND *rlp_statistic_ind
+                  )
+{
+  TRACE_FUNCTION ("mgt_rlp_statistic_ind()");
+  PACCESS        (rlp_statistic_ind);
+  {
+  PALLOC (l2r_statistic_ind, L2R_STATISTIC_IND);
+  l2r_statistic_ind->error_rate = rlp_statistic_ind->error_rate;
+  PSENDX (CTRL, l2r_statistic_ind);
+  }
+  PFREE (rlp_statistic_ind);
+}
+
+/*
++------------------------------------------------------------------------------
+|  Function    : mgt_rlp_detach_cnf
++------------------------------------------------------------------------------
+|  Description : Process primitive RLP_DETACH_CNF received from RLP.
+|
+|  Parameters  : rlp_detach_cnf -
+|
+|
+|  Return      : -
++------------------------------------------------------------------------------
+*/
+
+GLOBAL void mgt_rlp_detach_cnf(T_RLP_DETACH_CNF *rlp_detach_cnf)
+{
+  TRACE_FUNCTION ("mgt_rlp_detach_cnf()");
+  PACCESS        (rlp_detach_cnf);
+
+  switch (GET_STATE (MGT))
+  {
+  case MGT_PENDING_DETACH:
+    {
+    PPASS (rlp_detach_cnf, l2r_deactivate_cnf, L2R_DEACTIVATE_CNF);
+    PSENDX (CTRL, l2r_deactivate_cnf);
+    SET_STATE (MGT, MGT_DETACHED);
+    l2r_data_magic_num = 0;       /* memory is no more initialized */
+    break;
+    }
+
+  default:
+    PFREE (rlp_detach_cnf);
+    break;
+  }
+}
+