1
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 1 /*
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 2 +-----------------------------------------------------------------------------
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 3 | Project :
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 4 | Modul :
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 5 +-----------------------------------------------------------------------------
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 6 | Copyright 2002 Texas Instruments Berlin, AG
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 7 | All rights reserved.
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 8 |
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 9 | This file is confidential and a trade secret of Texas
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 10 | Instruments Berlin, AG
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 11 | The receipt of or possession of this file does not convey
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 12 | any rights to reproduce or disclose its contents or to
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 13 | manufacture, use, or sell anything it may describe, in
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 14 | whole, or in part, without the specific written consent of
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 15 | Texas Instruments Berlin, AG.
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 16 +-----------------------------------------------------------------------------
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 17 | Purpose : This modul is part of the entity PPP and implements all
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 18 | functions to handles the incoming process internal signals as
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 19 | described in the SDL-documentation (FRX-statemachine)
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 20 +-----------------------------------------------------------------------------
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 21 */
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 22
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 23 #define ENTITY_PPP
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 24
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 25 /*==== INCLUDES =============================================================*/
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 26
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 27 #include "typedefs.h" /* to get Condat data types */
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 28 #include "vsi.h" /* to get a lot of macros */
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 29 #include "macdef.h" /* to get a lot of macros */
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 30 #include "custom.h" /* to get a lot of macros */
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 31 /*lint -efile(766,gsm.h) */
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 32 #include "gsm.h" /* to get a lot of macros */
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 33 /*lint -efile(766,cnf_ppp.h) */
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 34 #include "cnf_ppp.h" /* to get cnf-definitions */
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 35 /*lint -efile(766,mon_ppp.h) */
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 36 #include "mon_ppp.h" /* to get mon-definitions */
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 37 #include "prim.h" /* to get the definitions of used SAP and directions */
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 38 #include "dti.h" /* to get the DTILIB definitions */
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 39 #include "ppp.h" /* to get the global entity definitions */
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 40
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 41 #include "ppp_frxf.h" /* to get function interface from frx */
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 42 #include "ppp_arbf.h" /* to get function interface from arb */
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 43 #include "ppp_ptxs.h" /* to get signal interface from ptx */
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 44
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 45 /*==== CONST ================================================================*/
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 46
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 47 /*==== LOCAL VARS ===========================================================*/
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 48
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 49 /*==== PRIVATE FUNCTIONS ====================================================*/
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 50
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 51 /*==== PUBLIC FUNCTIONS =====================================================*/
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 52
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 53
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 54
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 55 /*
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 56 +------------------------------------------------------------------------------
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 57 | Function : sig_ptx_frx_dead_mode_req
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 58 +------------------------------------------------------------------------------
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 59 | Description : Handles the internal signal SIG_PTX_FRX_DEAD_MODE_REQ
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 60 |
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 61 | Parameters : no parameters
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 62 |
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 63 +------------------------------------------------------------------------------
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 64 */
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 65 GLOBAL void sig_ptx_frx_dead_mode_req ()
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 66 {
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 67 TRACE_ISIG( "sig_ptx_frx_dead_mode_req" );
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 68
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 69 arb_discard_packet(ppp_data->frx.received_data);
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 70 arb_discard_packet(ppp_data->frx.stored_packet);
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 71 ppp_data->frx.received_data = NULL;
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 72 ppp_data->frx.stored_packet = NULL;
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 73 ppp_data->frx.store_state = FRX_ADD_ERROR;
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 74 ppp_data->frx.frame_complete = FALSE;
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 75 ppp_data->frx.data_flow_state = FRX_DATA_FLOW_DEAD;
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 76
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 77 switch( GET_STATE( PPP_SERVICE_FRX ) )
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 78 {
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 79 case FRX_READY:
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 80 case FRX_READY_NDTI:
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 81 case FRX_TRANSPARENT:
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 82 case FRX_TRANSPARENT_NDTI:
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 83 SET_STATE( PPP_SERVICE_FRX, FRX_DEAD );
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 84 break;
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 85
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 86 default:
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 87 TRACE_ERROR( "SIG_PTX_FRX_DEAD_MODE_REQ unexpected" );
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 88 break;
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 89 }
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 90 } /* sig_ptx_frx_dead_mode_req() */
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 91
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 92 /*
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 93 +------------------------------------------------------------------------------
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 94 | Function : sig_ptx_frx_ready_mode_req
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 95 +------------------------------------------------------------------------------
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 96 | Description : Handles the internal signal SIG_PTX_FRX_READY_MODE_REQ
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 97 |
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 98 | Parameters : no parameters
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 99 |
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 100 +------------------------------------------------------------------------------
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 101 */
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 102 GLOBAL void sig_ptx_frx_ready_mode_req ()
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 103 {
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 104 TRACE_ISIG( "sig_ptx_frx_ready_mode_req" );
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 105
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 106 switch( GET_STATE( PPP_SERVICE_FRX ) )
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 107 {
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 108 case FRX_DEAD:
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 109 SET_STATE( PPP_SERVICE_FRX, FRX_READY_NDTI );
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 110 break;
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 111
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 112 case FRX_DEAD_DTI:
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 113 SET_STATE( PPP_SERVICE_FRX, FRX_READY );
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 114 break;
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 115
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 116 default:
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 117 TRACE_ERROR( "SIG_PTX_FRX_READY_MODE_REQ unexpected" );
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 118 break;
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 119 }
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 120 } /* sig_ptx_frx_ready_mode_req() */
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 121
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 122 /*
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 123 +------------------------------------------------------------------------------
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 124 | Function : sig_ptx_frx_transparent_mode_req
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 125 +------------------------------------------------------------------------------
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 126 | Description : Handles the internal signal SIG_PTX_FRX_TRANSPARENT_MODE_REQ
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 127 |
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 128 | Parameters : no parameters
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 129 |
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 130 +------------------------------------------------------------------------------
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 131 */
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 132 GLOBAL void sig_ptx_frx_transparent_mode_req ()
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 133 {
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 134 TRACE_ISIG( "sig_ptx_frx_transparent_mode_req" );
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 135
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 136 switch( GET_STATE( PPP_SERVICE_FRX ) )
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 137 {
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 138 case FRX_DEAD:
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 139 SET_STATE( PPP_SERVICE_FRX, FRX_TRANSPARENT_NDTI );
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 140 break;
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 141
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 142 case FRX_DEAD_DTI:
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 143 SET_STATE( PPP_SERVICE_FRX, FRX_TRANSPARENT );
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 144 break;
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 145
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 146 default:
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 147 TRACE_ERROR( "SIG_PTX_FRX_TRANSPARENT_MODE_REQ unexpected" );
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 148 break;
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 149 }
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 150 } /* sig_ptx_frx_transparent_mode_req() */
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 151
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 152 /*
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 153 +------------------------------------------------------------------------------
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 154 | Function : sig_ptx_frx_start_flow_req
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 155 +------------------------------------------------------------------------------
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 156 | Description : Handles the internal signal SIG_PTX_FRX_START_FLOW_REQ
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 157 |
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 158 | Parameters : no parameters
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 159 |
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 160 +------------------------------------------------------------------------------
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 161 */
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 162 GLOBAL void sig_ptx_frx_start_flow_req ()
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 163 {
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 164 TRACE_ISIG( "sig_ptx_frx_start_flow_req" );
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 165 /*
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 166 * set FRX PTX data flow state to ready.
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 167 */
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 168 ppp_data->frx.data_flow_state = FRX_DATA_FLOW_READY;
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 169
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 170 switch( GET_STATE( PPP_SERVICE_FRX ) )
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 171 {
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 172 case FRX_READY:
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 173 /*
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 174 * Send if necessary residuary packets from frame received before
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 175 */
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 176 frx_send_pack_ready_mode ();
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 177 /*
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 178 * check if all packet of frame were sent and start dti
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 179 */
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 180 if((ppp_data->frx.frame_complete EQ FALSE ) AND
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 181 (ppp_data->frx.data_flow_state EQ FRX_DATA_FLOW_READY))
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 182 {
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 183 /*
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 184 * Send a start signal to DTI
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 185 */
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 186 dti_start(ppp_data->ppphDTI, PPP_INSTANCE, PEER_LAYER, PEER_CHANNEL);
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 187 }
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 188 break;
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 189
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 190 case FRX_TRANSPARENT:
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 191 /*
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 192 * Send if necessary residuary packets from frame received before
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 193 */
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 194 frx_send_pack_transp_mode ();
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 195 /*
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 196 * check if all packet of frame were sent and start dti
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 197 */
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 198 if((ppp_data->frx.frame_complete EQ FALSE) AND
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 199 (ppp_data->frx.data_flow_state EQ FRX_DATA_FLOW_READY))
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 200 {
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 201 /*
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 202 * Send a start signal to DTI
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 203 */
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 204 dti_start(ppp_data->ppphDTI, PPP_INSTANCE, PEER_LAYER, PEER_CHANNEL);
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 205 }
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 206 break;
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 207 case FRX_READY_NDTI:
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 208 case FRX_TRANSPARENT_NDTI:
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 209 /*
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 210 * silently ignore duplicate signal..
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 211 */
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 212 break;
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 213
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 214 default:
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 215 TRACE_ERROR( "SIG_PTX_FRX_START_FLOW_REQ unexpected" );
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 216 break;
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 217 }
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 218
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 219 } /* sig_ptx_frx_start_flow_req() */
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 220
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 221
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 222 /*
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 223 +------------------------------------------------------------------------------
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 224 | Function : sig_ptx_frx_stop_flow_req
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 225 +------------------------------------------------------------------------------
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 226 | Description : Handles the internal signal SIG_PTX_FRX_STOP_FLOW_REQ
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 227 |
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 228 | Parameters : no parameters
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 229 |
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 230 +------------------------------------------------------------------------------
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 231 */
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 232 GLOBAL void sig_ptx_frx_stop_flow_req ()
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 233 {
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 234 TRACE_ISIG( "sig_ptx_frx_stop_flow_req" );
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 235
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 236 /*
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 237 * set FRX-PTX data flow state to dead.
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 238 */
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 239 ppp_data->frx.data_flow_state = FRX_DATA_FLOW_DEAD;
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 240
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 241 switch( GET_STATE( PPP_SERVICE_FRX ) )
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 242 {
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 243 case FRX_READY:
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 244 case FRX_TRANSPARENT:
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 245 /*
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 246 * Send a stop signal to DTI
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 247 */
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 248 dti_stop(ppp_data->ppphDTI, PPP_INSTANCE, PEER_LAYER, PEER_CHANNEL);
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 249 break;
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 250
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 251 case FRX_READY_NDTI:
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 252 case FRX_TRANSPARENT_NDTI:
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 253 /*
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 254 * silently ignore duplicate signal..
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 255 */
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 256 break;
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 257 default:
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 258 TRACE_ERROR( "SIG_PTX_FRX_STOP_FLOW_REQ unexpected" );
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 259 break;
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 260 }
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 261
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 262 } /* sig_ptx_frx_stop_flow_req() */
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 263
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 264 /*
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 265 +------------------------------------------------------------------------------
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 266 | Function : sig_arb_frx_dti_connected_req
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 267 +------------------------------------------------------------------------------
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 268 | Description : Handles the internal signal SIG_ARB_FRX_DTI_CONNECTED_REQ
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 269 |
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 270 | Parameters : no parameters
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 271 |
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 272 +------------------------------------------------------------------------------
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 273 */
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 274 GLOBAL void sig_arb_frx_dti_connected_req ()
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 275 {
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 276 TRACE_ISIG( "sig_arb_frx_dti_connected_req" );
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 277
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 278 switch( GET_STATE( PPP_SERVICE_FRX ) )
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 279 {
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 280 case FRX_DEAD:
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 281 SET_STATE( PPP_SERVICE_FRX, FRX_DEAD_DTI );
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 282 break;
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 283
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 284 case FRX_READY_NDTI:
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 285 SET_STATE( PPP_SERVICE_FRX, FRX_READY );
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 286 /*
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 287 * Send a start signal to DTI
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 288 */
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 289 dti_start(ppp_data->ppphDTI, PPP_INSTANCE, PEER_LAYER, PEER_CHANNEL);
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 290 break;
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 291
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 292 case FRX_TRANSPARENT_NDTI:
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 293 SET_STATE( PPP_SERVICE_FRX, FRX_TRANSPARENT );
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 294 /*
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 295 * Send a start signal to DTI
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 296 */
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 297 dti_start(ppp_data->ppphDTI, PPP_INSTANCE, PEER_LAYER, PEER_CHANNEL);
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 298 break;
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 299
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 300 default:
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 301 TRACE_ERROR( "SIG_ARB_FRX_DTI_CONNECTED_REQ unexpected" );
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 302 break;
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 303 }
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 304 } /* sig_arb_frx_dti_connected_req() */
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 305
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 306
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 307 /*
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 308 +------------------------------------------------------------------------------
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 309 | Function : sig_dti_frx_data_received_ind
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 310 +------------------------------------------------------------------------------
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 311 | Description : Handles the signal SIG_DTI_FRX_DATA_RECEIVED_IND
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 312 |
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 313 | Parameters : dti_data_ind - Ptr. to primitive payload
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 314 |
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 315 +------------------------------------------------------------------------------
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 316 */
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 317
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 318 GLOBAL void sig_dti_frx_data_received_ind (T_DTI2_DATA_IND *dti_data_ind)
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 319 {
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 320 TRACE_FUNCTION( "sig_dti_frx_data_received_ind" );
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 321
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 322 PACCESS(dti_data_ind);
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 323
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 324 #ifdef PPP_HDLC_TRACE
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 325 {
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 326 T_desc2* trace_desc;
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 327
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 328 trace_desc = (T_desc2*)dti_data_ind->desc_list2.first;
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 329 while(trace_desc)
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 330 {
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 331 if(trace_desc->len)
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 332 {
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 333 TRACE_EVENT_P4("new desc=0x%08x: first=0x%02x last=0x%02x len=%d",
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 334 trace_desc,
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 335 trace_desc->buffer[0],
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 336 trace_desc->buffer[trace_desc->len - 1],
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 337 trace_desc->len);
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 338 }
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 339 else
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 340 {
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 341 TRACE_EVENT_P1("new desc=0x%08x: len=0", trace_desc);
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 342 }
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 343 trace_desc = (T_desc2*)trace_desc->next;
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 344 }
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 345 }
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 346 #endif /* PPP_HDLC_TRACE */
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 347
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 348 switch( GET_STATE( PPP_SERVICE_FRX ) )
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 349 {
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 350 case FRX_READY:
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 351 ppp_data->frx.received_data = (T_desc2*)dti_data_ind->desc_list2.first;
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 352 ppp_data->frx.proceed_data = 0;
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 353
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 354 /*
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 355 * send as many packets to ptx as can be extracted
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 356 * from the one just received
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 357 */
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 358 frx_add_desc();
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 359 frx_send_pack_ready_mode();
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 360 break;
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 361
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 362 case FRX_TRANSPARENT:
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 363 ppp_data->frx.received_data = (T_desc2*)dti_data_ind->desc_list2.first;
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 364 ppp_data->frx.proceed_data = 0;
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 365
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 366 /*
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 367 * send as many packets to ptx as can be extracted
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 368 * from the one just received
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 369 */
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 370 frx_detect_frame();
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 371 frx_send_pack_transp_mode();
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 372 break;
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 373
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 374 default:
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 375 TRACE_ERROR( "DTI signal unexpected" );
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 376 /*
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 377 * free the data
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 378 */
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 379 arb_discard_packet((T_desc2*)dti_data_ind->desc_list2.first);
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 380 break;
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 381 }
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 382
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 383 /*
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 384 * free the primitive
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 385 */
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 386 PFREE(dti_data_ind);
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 387 } /* sig_dti_frx_data_received_ind() */
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 388
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 389
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 390