FreeCalypso > hg > fc-magnetite
annotate src/g23m-gprs/llc/llc_rxf.c @ 628:38a65c3a96af
aci2 & aci3: AT@SPKR conditionalized on GPIO1_SPEAKER_CTRL
new preprocessor symbol
| author | Mychaela Falconia <falcon@freecalypso.org> | 
|---|---|
| date | Mon, 23 Dec 2019 07:30:59 +0000 | 
| parents | 219afcfc6250 | 
| children | 
| rev | line source | 
|---|---|
| 183 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1 /* | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2 +----------------------------------------------------------------------------- | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 3 | Project : | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 4 | Modul : | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 5 +----------------------------------------------------------------------------- | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 6 | Copyright 2002 Texas Instruments Berlin, AG | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 7 | All rights reserved. | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 8 | | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 9 | This file is confidential and a trade secret of Texas | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 10 | Instruments Berlin, AG | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 11 | The receipt of or possession of this file does not convey | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 12 | any rights to reproduce or disclose its contents or to | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 13 | manufacture, use, or sell anything it may describe, in | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 14 | whole, or in part, without the specific written consent of | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 15 | Texas Instruments Berlin, AG. | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 16 +----------------------------------------------------------------------------- | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 17 | Purpose : This modul is part of the entity LLC and implements all | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 18 | procedures and functions as described in the | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 19 | SDL-documentation (RX-statemachine) | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 20 +----------------------------------------------------------------------------- | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 21 */ | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 22 | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 23 #ifndef LLC_RXF_C | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 24 #define LLC_RXF_C | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 25 #endif | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 26 | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 27 #define ENTITY_LLC | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 28 | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 29 /*==== INCLUDES =============================================================*/ | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 30 | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 31 #include <string.h> /* to get memcpy() */ | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 32 | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 33 #include "typedefs.h" /* to get Condat data types */ | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 34 #include "vsi.h" /* to get a lot of macros */ | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 35 #include "macdef.h" | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 36 #include "gprs.h" | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 37 #include "gsm.h" /* to get a lot of macros */ | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 38 #include "cnf_llc.h" /* to get cnf-definitions */ | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 39 #include "mon_llc.h" /* to get mon-definitions */ | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 40 #include "prim.h" /* to get the definitions of used SAP and directions */ | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 41 #include "llc.h" /* to get the global entity definitions */ | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 42 | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 43 #include "llc_rxf.h" /* to get local defines */ | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 44 #include "llc_rxp.h" /* to get the function rx_cci_decipher_cnf */ | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 45 #include "llc_f.h" /* to get global functions, e.g. llc_generate_input */ | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 46 #ifndef TI_PS_OP_CIPH_DRIVER | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 47 #include "cci_fbsf.h" /* to get functional interface */ | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 48 #endif | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 49 /*==== CONST ================================================================*/ | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 50 | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 51 /*==== LOCAL VARS ===========================================================*/ | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 52 | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 53 /*==== PRIVATE FUNCTIONS ====================================================*/ | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 54 #ifndef CF_FAST_EXEC | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 55 | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 56 GLOBAL UBYTE rx_get_desc_octet (T_desc_list *desc_list, | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 57 USHORT offset, | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 58 UBYTE *data_ptr); | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 59 #endif /* CF_FAST_EXEC */ | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 60 | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 61 /*==== PUBLIC FUNCTIONS =====================================================*/ | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 62 | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 63 | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 64 /* | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 65 +------------------------------------------------------------------------------ | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 66 | Function : rx_init | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 67 +------------------------------------------------------------------------------ | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 68 | Description : This procedure initialises all necessary variables of | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 69 | receive_pdu. | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 70 | | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 71 | Parameters : | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 72 | | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 73 +------------------------------------------------------------------------------ | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 74 */ | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 75 #ifndef CF_FAST_EXEC | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 76 | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 77 GLOBAL void rx_init (void) | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 78 { | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 79 TRACE_FUNCTION( "rx_init" ); | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 80 | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 81 /* | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 82 * Initialise service RX with state TLLI_UNASSIGNED. | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 83 */ | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 84 INIT_STATE (RX, RX_TLLI_UNASSIGNED); | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 85 | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 86 return; | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 87 } /* rx_init() */ | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 88 | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 89 #endif /* CF_FAST_EXEC */ | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 90 | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 91 | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 92 /* | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 93 +------------------------------------------------------------------------------ | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 94 | Function : rx_analyse_ctrl_field | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 95 +------------------------------------------------------------------------------ | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 96 | Description : This procedure analyses the received LLC frame control field | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 97 | and sets frame_type according to the frame type (U, UI, I/S). | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 98 | protected_mode is set according to the protected mode of the | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 99 | frame (U and I/S always protected, UI depends on setting of | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 100 | PM bit). The type of protected_mode is the same as in | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 101 | CCI_DECIPHER_REQ. ns is set to N(S) for I frames, N(U) for | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 102 | UI frames, or an undefined value for S and U frames. ciphering | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 103 | is set to TRUE if the frame is ciphered (U never, I/S always, | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 104 | UI depends on setting of E bit), otherwise to FALSE. frame_ok | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 105 | indicates if the frame contains enough octets to contain a | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 106 | known control field (i.e. all necessary information is | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 107 | accessible, not the control field is complete!). | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 108 | | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 109 | Parameters : grlc_unitdata_ind - a valid pointer to a GRLC_UNITDATA_IND | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 110 | primitive | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 111 | frame_type - a valid pointer to a T_PDU_TYPE variable | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 112 | protected_mode - a valid pointer to a UBYTE variable | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 113 | sapi - a valid pointer to a UBYTE variable | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 114 | ns - a valid pointer to a T_FRAME_NUM variable | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 115 | ciphering - a valid pointer to a BOOL variable | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 116 | header_size - a valid pointer to a USHORT variable | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 117 | frame_ok - a valid pointer to a BOOL variable | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 118 | | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 119 +------------------------------------------------------------------------------ | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 120 */ | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 121 | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 122 #ifndef CF_FAST_EXEC | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 123 | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 124 GLOBAL void rx_analyse_ctrl_field (T_GRLC_UNITDATA_IND *grlc_unitdata_ind, | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 125 T_PDU_TYPE *frame_type, | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 126 UBYTE *protected_mode, | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 127 UBYTE *sapi, | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 128 T_FRAME_NUM *ns, | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 129 BOOL *ciphering, | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 130 USHORT *header_size, | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 131 BOOL *frame_ok) | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 132 { | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 133 UBYTE first_octet; | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 134 UBYTE sec_octet; | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 135 UBYTE command_octet; | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 136 UBYTE sack_k_octet; | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 137 | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 138 | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 139 TRACE_FUNCTION( "rx_analyse_ctrl_field" ); | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 140 | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 141 /* | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 142 * Check if the frame contains enough octets to access the first octet of | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 143 * the control field to find out the type of the frame. | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 144 */ | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 145 if (grlc_unitdata_ind->desc_list.list_len < CTRL_MIN_OCTETS) | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 146 { | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 147 *frame_ok = FALSE; | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 148 return; | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 149 } | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 150 | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 151 /* | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 152 * Assume initially that the frame is ok. | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 153 */ | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 154 *frame_ok = TRUE; | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 155 | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 156 /* | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 157 * Set first_octet to the value of the first frame octet (offset 0), which | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 158 * is the address field. | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 159 */ | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 160 rx_get_desc_octet (&grlc_unitdata_ind->desc_list, 0, &first_octet); | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 161 | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 162 *sapi = first_octet & 0x0F; | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 163 | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 164 /* | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 165 * Set sec_octet to the value of the second frame octet (offset 1), which | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 166 * is the first octet of the control field. | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 167 */ | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 168 rx_get_desc_octet (&grlc_unitdata_ind->desc_list, 1, &sec_octet); | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 169 | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 170 | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 171 /* | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 172 * Determine frame_type, along with ns, protected_mode, and ciphering, | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 173 * depending on the frame type. | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 174 */ | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 175 if ((sec_octet & I_FRAME_MASK) EQ I_FRAME_ID) | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 176 { | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 177 /* | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 178 * I frame, protected, ciphered, at least 4 octets required to access all | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 179 * requested information (1 Address, 3 Control). | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 180 */ | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 181 *frame_type = I_FRAME; | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 182 *protected_mode = CCI_PM_PROTECTED; | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 183 *ciphering = TRUE; | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 184 | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 185 /* | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 186 * Check if the frame contains enough octets to access the complete | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 187 * I frame control field. | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 188 */ | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 189 if (grlc_unitdata_ind->desc_list.list_len < I_CTRL_MIN_OCTETS) | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 190 { | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 191 *frame_ok = FALSE; | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 192 return; | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 193 } | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 194 | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 195 /* | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 196 * Determine the header_size | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 197 */ | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 198 *header_size = I_CTRL_MIN_OCTETS; | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 199 | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 200 /* | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 201 * Add bytes in case of SACK-Bitmap (add K+1). Therefore get at first | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 202 * the command octet (offset 3). In case of an SACK, get next the k | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 203 * octet (offset 4) and add the additional size. | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 204 */ | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 205 rx_get_desc_octet (&grlc_unitdata_ind->desc_list, 3, &command_octet); | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 206 | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 207 if ( (command_octet & 0x03) == I_FRAME_SACK ) | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 208 { | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 209 *header_size += 1; /* k octet */ | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 210 | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 211 if (grlc_unitdata_ind->desc_list.list_len < *header_size) | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 212 { | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 213 *frame_ok = FALSE; | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 214 return; | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 215 } | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 216 | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 217 rx_get_desc_octet (&grlc_unitdata_ind->desc_list, 4, &sack_k_octet); | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 218 | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 219 *header_size += (sack_k_octet & 0x1F); /* bitmap size */ | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 220 | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 221 if (grlc_unitdata_ind->desc_list.list_len < *header_size) | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 222 { | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 223 *frame_ok = FALSE; | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 224 return; | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 225 } | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 226 } | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 227 | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 228 /* | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 229 * Extract N(S) and store it in ns. | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 230 */ | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 231 *ns = (((T_FRAME_NUM) | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 232 rx_get_desc_octet (&grlc_unitdata_ind->desc_list, 1, NULL)) & 0x1F) << 4; | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 233 *ns |= (((T_FRAME_NUM) | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 234 rx_get_desc_octet (&grlc_unitdata_ind->desc_list, 2, NULL)) >> 4); | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 235 } | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 236 else if ((sec_octet & S_FRAME_MASK) EQ S_FRAME_ID) | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 237 { | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 238 /* | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 239 * S frame, protected, not ciphered. No N(S) present, only N(R). | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 240 */ | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 241 *frame_type = S_FRAME; | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 242 *protected_mode = CCI_PM_PROTECTED; | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 243 *ciphering = FALSE; | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 244 | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 245 *header_size = S_CTRL_MIN_OCTETS; | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 246 | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 247 /* not necessary to add bytes in case of SACK - value is not used */ | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 248 } | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 249 else if ((sec_octet & UI_FRAME_MASK) EQ UI_FRAME_ID) | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 250 { | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 251 /* | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 252 * UI frame, at least 3 octets required to access all requested | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 253 * information (1 Address, 2 Control). | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 254 */ | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 255 *frame_type = UI_FRAME; | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 256 | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 257 /* | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 258 * Check if the frame contains enough octets to access the complete | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 259 * UI frame control field. | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 260 */ | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 261 if (grlc_unitdata_ind->desc_list.list_len < UI_CTRL_MIN_OCTETS) | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 262 { | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 263 *frame_ok = FALSE; | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 264 return; | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 265 } | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 266 | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 267 /* | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 268 * Extract protected mode setting of frame (PM bit). | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 269 */ | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 270 if (rx_get_desc_octet (&grlc_unitdata_ind->desc_list, 2, NULL) & 0x01) | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 271 { | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 272 *protected_mode = CCI_PM_PROTECTED; | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 273 } | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 274 else | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 275 { | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 276 *protected_mode = CCI_PM_UNPROTECTED; | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 277 } | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 278 | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 279 /* | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 280 * Extract ciphering setting of frame (E bit). | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 281 */ | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 282 if (rx_get_desc_octet (&grlc_unitdata_ind->desc_list, 2, NULL) & 0x02) | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 283 { | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 284 *ciphering = TRUE; | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 285 } | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 286 else | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 287 { | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 288 *ciphering = FALSE; | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 289 } | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 290 | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 291 *header_size = UI_CTRL_MIN_OCTETS; | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 292 | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 293 /* | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 294 * Extract N(U) and store it in ns. | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 295 */ | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 296 *ns = (((T_FRAME_NUM) | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 297 rx_get_desc_octet (&grlc_unitdata_ind->desc_list, 1, NULL)) & 0x07) << 6; | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 298 *ns |= (((T_FRAME_NUM) | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 299 rx_get_desc_octet (&grlc_unitdata_ind->desc_list, 2, NULL)) >> 2); | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 300 } | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 301 else if ((sec_octet & U_FRAME_MASK) EQ U_FRAME_ID) | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 302 { | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 303 /* | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 304 * U frame, protected, not ciphered. No N(S) present. | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 305 */ | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 306 *frame_type = U_FRAME; | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 307 *protected_mode = CCI_PM_PROTECTED; | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 308 *ciphering = FALSE; | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 309 | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 310 *header_size = U_CTRL_MIN_OCTETS; | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 311 } | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 312 | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 313 return; | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 314 } /* rx_analyse_ctrl_field() */ | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 315 | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 316 #endif /* CF_FAST_EXEC */ | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 317 | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 318 /* | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 319 +------------------------------------------------------------------------------ | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 320 | Function : rx_decipher_req | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 321 +------------------------------------------------------------------------------ | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 322 | Description : Handles the function rx_decipher_req. This functions sets the | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 323 | ciphering parameters and calls the deciphering driver function. | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 324 | | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 325 | Parameters : | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 326 | | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 327 +------------------------------------------------------------------------------ | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 328 */ | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 329 | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 330 #ifndef CF_FAST_EXEC | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 331 GLOBAL void rx_decipher_req (T_CCI_DECIPHER_REQ *decipher_req) | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 332 { | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 333 T_CIPH_init_cipher_req_parms init_cipher_req_parms; | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 334 T_CIPH_cipher_req_parms cipher_req_parms; | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 335 T_CIPH_in_data_list in_data_list; | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 336 T_CIPH_out_data out_data; | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 337 T_CIPH_ck ck; | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 338 U16 i; | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 339 U8 status; | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 340 U16 cnt = 0; | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 341 | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 342 TRACE_FUNCTION( "rx_decipher_req" ); | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 343 | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 344 #ifdef LLC_TRACE_CIPHERING | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 345 TRACE_EVENT("DOWNLINK CIPHERED DATA"); | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 346 llc_trace_desc_list(&decipher_req->desc_list); | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 347 #endif | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 348 | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 349 /* | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 350 * Copy pointer to desc's from CIPHER_REQ to the in_data_list | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 351 * The in_data array in allocated dynamically in this func. | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 352 */ | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 353 llc_copy_dl_data_to_list(decipher_req, &in_data_list); | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 354 /* | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 355 * Set ciphering parameters | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 356 */ | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 357 cipher_req_parms.gprs_parameters.pm = decipher_req->pm; | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 358 cipher_req_parms.gprs_parameters.header_size = decipher_req->header_size; | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 359 cipher_req_parms.gprs_parameters.ciphering_input = | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 360 decipher_req->ciphering_input; | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 361 cipher_req_parms.gprs_parameters.threshold = 0; | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 362 init_cipher_req_parms.direction = CIPH_DOWNLINK_DIR; | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 363 init_cipher_req_parms.algo = decipher_req->ciphering_algorithm; | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 364 init_cipher_req_parms.ptr_ck = & ck; | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 365 /* | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 366 * Copy ciphering key | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 367 */ | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 368 for (i = 0; i < 8;i++) { | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 369 init_cipher_req_parms.ptr_ck->ck_element[i] = decipher_req->kc.key[i]; | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 370 } | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 371 | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 372 { | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 373 /* Use GRLC_DATA_REQ instead of CCI_CIPHER_CNF to avoid PPASS in LLC*/ | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 374 PALLOC_SDU (ll_unitdata_ind, LL_UNITDATA_IND, | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 375 (USHORT)((decipher_req->desc_list.list_len*8) - FCS_SIZE_BITS)); | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 376 | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 377 ll_unitdata_ind->sdu.o_buf = 0; | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 378 ll_unitdata_ind->sdu.l_buf = 0; | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 379 out_data.buf = | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 380 (U32)(&ll_unitdata_ind->sdu.buf[ll_unitdata_ind->sdu.o_buf >> 3]); | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 381 /* | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 382 * Initialize ciphering driver and decipher data | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 383 */ | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 384 #ifdef TI_PS_OP_CIPH_DRIVER | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 385 ciph_init_cipher_req (&init_cipher_req_parms, NULL); | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 386 ciph_cipher_req (&cipher_req_parms, &in_data_list, &out_data, &status); | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 387 #else | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 388 ciph_init_cipher_req_sim (&init_cipher_req_parms, NULL); | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 389 ciph_cipher_req_sim (&cipher_req_parms, &in_data_list, &out_data, &status); | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 390 #endif | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 391 /* | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 392 * "Send" DECIPHER_CNF to LLC | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 393 */ | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 394 ll_unitdata_ind->sdu.l_buf = out_data.len * 8; | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 395 ll_unitdata_ind->tlli = decipher_req->reference1; | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 396 ll_unitdata_ind->cipher = (UBYTE)decipher_req->reference2; | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 397 if (status == CIPH_CIPH_PASS){ | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 398 ll_unitdata_ind->sapi = CCI_FCS_PASSED; | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 399 } else { | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 400 ll_unitdata_ind->sapi = CCI_FCS_FAILED; | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 401 } | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 402 | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 403 #ifdef LLC_TRACE_CIPHERING | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 404 TRACE_EVENT("DOWNLINK DECIPHERED DATA"); | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 405 llc_trace_sdu(&ll_unitdata_ind->sdu); | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 406 #endif | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 407 rx_cci_decipher_cnf(ll_unitdata_ind); | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 408 } | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 409 /* | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 410 * Free in_data array from in_data_list allocated in llc_copy_dl_data_to_list | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 411 */ | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 412 if(in_data_list.ptr_in_data != NULL){ | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 413 MFREE(in_data_list.ptr_in_data); | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 414 in_data_list.ptr_in_data = NULL; | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 415 } | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 416 /* | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 417 * Free descriptors from the deipher_req->desc_list | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 418 */ | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 419 if (decipher_req != NULL) | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 420 { | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 421 T_desc *desc = (T_desc *)decipher_req->desc_list.first; | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 422 T_desc *next_desc; | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 423 while (desc NEQ NULL){ | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 424 next_desc = (T_desc *)desc->next; | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 425 MFREE (desc); | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 426 desc = next_desc; | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 427 /* increase freed partitions counter */ | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 428 cnt++; | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 429 } | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 430 MFREE(decipher_req); | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 431 decipher_req = NULL; | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 432 } | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 433 llc_data->fbs.cci_freed_partition +=cnt; | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 434 | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 435 /* trace number of freed partitions */ | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 436 if(llc_data->fbs.cci_info_trace){ | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 437 TRACE_EVENT_P2("INFO CCI: freed partitions %ld, total=%ld", | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 438 cnt,llc_data->fbs.cci_freed_partition); | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 439 } | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 440 | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 441 } /* rx_decipher_req */ | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 442 | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 443 #endif | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 444 | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 445 /* | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 446 +------------------------------------------------------------------------------ | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 447 | Function : rx_send_decipher_req | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 448 +------------------------------------------------------------------------------ | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 449 | Description : This procedure allocates the CCI_DECIPHER_REQ primitive, fills | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 450 | in all necessary parameters and sends the primitive to CCI. | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 451 | | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 452 | Parameters : grlc_unitdata_ind - a valid pointer to a GRLC_UNITDATA_IND | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 453 | primitive | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 454 | frame_type - indicates (un)acknowledged operation mode | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 455 | protected_mode - pm setting for CCI_DECIPHER_REQ | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 456 | ns - N(S)/N(U) for deciphering, otherwise | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 457 | undefined value | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 458 | header_size - size of header bytes (not ciphered bytes) | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 459 | ciphering - indicates deciphering (TRUE/FALSE) | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 460 | | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 461 +------------------------------------------------------------------------------ | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 462 */ | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 463 #ifndef CF_FAST_EXEC | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 464 | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 465 GLOBAL void rx_send_decipher_req (T_GRLC_UNITDATA_IND *grlc_unitdata_ind, | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 466 T_PDU_TYPE frame_type, | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 467 UBYTE protected_mode, | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 468 T_FRAME_NUM ns, | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 469 USHORT header_size, | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 470 BOOL ciphering) | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 471 { | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 472 ULONG oc; | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 473 | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 474 TRACE_FUNCTION ("rx_send_decipher_req"); | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 475 | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 476 { | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 477 /* | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 478 * No need to PPASS GRLC_xDATA_IND, because desc_list contains a pointer | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 479 * which can be simply copied. | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 480 */ | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 481 T_CCI_DECIPHER_REQ *cci_decipher_req; | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 482 MALLOC(cci_decipher_req, sizeof(T_CCI_DECIPHER_REQ)); | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 483 | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 484 /* | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 485 * Requires rx_analyse_ctrl_field() to set a correct CCI value. | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 486 */ | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 487 cci_decipher_req->pm = protected_mode; | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 488 | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 489 if (ciphering EQ TRUE) | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 490 { | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 491 cci_decipher_req->reference2 = LL_CIPHER_ON; /* re-use of reference is ok */ | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 492 cci_decipher_req->ciphering_algorithm = llc_data->ciphering_algorithm; | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 493 memcpy (&cci_decipher_req->kc, &llc_data->kc, sizeof(T_kc)); | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 494 | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 495 /* | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 496 * Calculate the OC which is valid for this ns. This could be the | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 497 * current OC or OC + 1 in case of an modulo overflow of ns | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 498 */ | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 499 switch (frame_type) | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 500 { | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 501 case I_FRAME: | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 502 case S_FRAME: | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 503 if (ns >= llc_data->sapi->vr) | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 504 oc = llc_data->sapi->oc_i_rx; | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 505 else | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 506 oc = llc_data->sapi->oc_i_rx + (MAX_SEQUENCE_NUMBER+1); | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 507 break; | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 508 | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 509 default: | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 510 if (ns >= llc_data->sapi->vur) | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 511 oc = llc_data->sapi->oc_ui_rx; | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 512 else | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 513 oc = llc_data->sapi->oc_ui_rx + (MAX_SEQUENCE_NUMBER+1); | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 514 break; | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 515 } | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 516 | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 517 llc_generate_input (llc_data->current_sapi, frame_type, ns, | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 518 &cci_decipher_req->ciphering_input, oc); | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 519 | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 520 cci_decipher_req->direction = CCI_DIRECTION_DOWNLINK; | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 521 } | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 522 else /* ciphering EQ FALSE */ | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 523 { | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 524 cci_decipher_req->reference2 = LL_CIPHER_OFF; | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 525 cci_decipher_req->ciphering_algorithm = CCI_CIPHER_NO_ALGORITHM; | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 526 } | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 527 | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 528 cci_decipher_req->header_size = header_size; | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 529 | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 530 /* | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 531 * TLLI must be stored somewhere | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 532 */ | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 533 cci_decipher_req->reference1 = grlc_unitdata_ind->tlli; | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 534 | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 535 cci_decipher_req->desc_list = grlc_unitdata_ind->desc_list; | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 536 | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 537 /* TRACE_EVENT ("CCI thread not available, using functional interface"); */ | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 538 | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 539 rx_decipher_req(cci_decipher_req); | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 540 } | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 541 | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 542 return; | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 543 } /* rx_send_decipher_req() */ | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 544 | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 545 #endif /* CF_FAST_EXEC */ | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 546 | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 547 /* | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 548 +------------------------------------------------------------------------------ | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 549 | Function : rx_interpret_frame | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 550 +------------------------------------------------------------------------------ | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 551 | Description : This procedure analyses the LLC header and checksum of the | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 552 | given frame (U, UI, or I) and sets sapi, pdu_type, command, | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 553 | cr_bit, pf_bit, nr, and ns accordingly. The FCS field is not | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 554 | included in frame, it has already been stripped off. frame_ok | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 555 | is set to TRUE if the frame fulfils the following requirements: | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 556 | known PDU type, valid length, valid PD bit, valid SAPI. | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 557 | frame_rej indicates a frame rejection condition if any bit of | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 558 | W4-W1 is set. If a frame is rejected, frame_rej_ctrl_length | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 559 | indicates the length of the control field. If this length | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 560 | could not be determined, frame_rej_ctrl_length is set to the | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 561 | number of control field octets of the frame. | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 562 | | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 563 | Parameters : frame - contains the frame to be analysed, must be | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 564 | a valid pointer | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 565 | sapi - will be set to the SAPI of the frame, must be | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 566 | a valid pointer | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 567 | pdu_type - will be set to the PDU type of the frame, must be | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 568 | a valid pointer | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 569 | command - will be set to the command (I/S, U) of the frame | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 570 | (if available), must be a valid pointer | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 571 | cr_bit - will be set to the C/R bit of the frame, must be | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 572 | a valid pointer | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 573 | pf_bit - will be set to the P/F bit of the frame (if | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 574 | available), must be a valid pointer | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 575 | nr - will be set to N(R) / N(U) of the frame (if | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 576 | available), must be a valid pointer | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 577 | ns - will be set to N(S) of the frame (if available), | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 578 | must be a valid pointer | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 579 | frame_ok - TRUE if the frame is ok, else FALSE, must be | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 580 | a valid pointer | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 581 | frame_rej - indicates a frame rejection condition, must be | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 582 | a valid pointer | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 583 | frame_rej_ctrl_length - number of octets in the rejected | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 584 | control field, must be a valid pointer | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 585 | | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 586 +------------------------------------------------------------------------------ | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 587 */ | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 588 | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 589 /*#if defined(CF_FAST_EXEC) || defined(_SIMULATION_) || \ | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 590 !defined(REL99) || defined(LL_2to1) */ | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 591 | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 592 GLOBAL void rx_interpret_frame (T_sdu *frame, | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 593 UBYTE *sapi, | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 594 T_PDU_TYPE *pdu_type, | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 595 T_COMMAND *command, | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 596 T_BIT *cr_bit, | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 597 T_BIT *pf_bit, | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 598 T_FRAME_NUM *nr, | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 599 T_FRAME_NUM *ns, | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 600 BOOL *frame_ok, | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 601 UBYTE *frame_rej, | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 602 USHORT *frame_rej_ctrl_length, | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 603 UBYTE cipher) | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 604 { | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 605 USHORT min_length = 0; /* minimum required frame length */ | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 606 BOOL check_length; /* check/ignore length at the end */ | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 607 | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 608 TRACE_FUNCTION( "rx_interpret_frame" ); | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 609 | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 610 /* | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 611 * Preset variables with suspected success, control field length is not | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 612 * yet known, so assume complete frame length. | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 613 */ | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 614 *frame_ok = TRUE; | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 615 *frame_rej = FRAME_NOT_REJ; | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 616 *frame_rej_ctrl_length = frame->l_buf/8 - 1; | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 617 | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 618 /* | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 619 * Frame length is selectively activated, depending on frame type, command, | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 620 * etc. Ignore frame length per default. | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 621 */ | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 622 check_length = FALSE; | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 623 | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 624 | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 625 /* | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 626 * Check if the frame contains enough octets to access the first octet of | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 627 * the control field to find out the type of the frame. | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 628 */ | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 629 if (frame->l_buf/8 < CTRL_MIN_OCTETS) | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 630 { | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 631 *frame_ok = FALSE; | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 632 return; | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 633 } | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 634 | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 635 | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 636 /* | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 637 * Check if PD bit is set to 0. If it is not, the frame is invalid. | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 638 * <R.LLC.XCEPTION.A.001> | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 639 */ | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 640 if ((frame->buf[frame->o_buf/8] & 0x80) != 0x00) | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 641 { | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 642 *frame_ok = FALSE; | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 643 return; | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 644 } | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 645 | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 646 | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 647 /* | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 648 * Extract C/R bit. | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 649 */ | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 650 *cr_bit = (frame->buf[frame->o_buf/8] & 0x40) >> 6; | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 651 | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 652 | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 653 /* | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 654 * Extract SAPI and check if the frame contains a reserved SAPI. | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 655 * <R.LLC.XCEPTION.A.001> | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 656 */ | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 657 *sapi = frame->buf[frame->o_buf/8] & 0x0F; | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 658 switch (*sapi) /* !!!!! constants or function/macro to determine invalid sapis */ | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 659 { | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 660 case 0: | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 661 case 2: | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 662 case 4: | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 663 case 6: | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 664 case 8: | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 665 case 10: | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 666 case 12: | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 667 case 13: | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 668 case 14: | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 669 case 15: | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 670 { | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 671 *frame_ok = FALSE; | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 672 return; | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 673 } | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 674 } | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 675 | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 676 | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 677 /* | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 678 * Determine the PDU type of the frame, along with the minimum length | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 679 * required for this PDU type to constitute a complete frame. | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 680 * Additionally, extract available variables for each PDU type. | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 681 */ | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 682 if ((frame->buf[(frame->o_buf/8)+1] & I_FRAME_MASK) EQ I_FRAME_ID) | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 683 { | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 684 /* | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 685 * I frame, at least 5 octets (1 Address, 3 Control, 1(++) | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 686 * Information, no FCS) | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 687 */ | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 688 *pdu_type = I_FRAME; | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 689 min_length = I_FRAME_MIN_OCTETS_WITHOUT_FCS; | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 690 *frame_rej_ctrl_length = I_CTRL_OCTETS; | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 691 | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 692 /* | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 693 * Extract A bit (stored in P/F bit) | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 694 */ | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 695 *pf_bit = (frame->buf[(frame->o_buf/8)+1] & 0x40) >> 6; | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 696 | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 697 /* | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 698 * Check if the frame contains enough octets to access the complete | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 699 * I frame control field. | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 700 */ | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 701 if (frame->l_buf/8 < I_CTRL_MIN_OCTETS) | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 702 { | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 703 *frame_ok = FALSE; | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 704 return; | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 705 } | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 706 | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 707 /* | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 708 * Extract N(S), N(R) | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 709 */ | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 710 *ns = (T_FRAME_NUM)(frame->buf[(frame->o_buf/8)+1] & 0x1F) << 4; | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 711 *ns |= (T_FRAME_NUM)(frame->buf[(frame->o_buf/8)+2] >> 4); | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 712 | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 713 *nr = (T_FRAME_NUM)(frame->buf[(frame->o_buf/8)+2] & 0x07) << 6; | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 714 *nr |= (T_FRAME_NUM)(frame->buf[(frame->o_buf/8)+3] >> 2); | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 715 | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 716 /* | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 717 * Determine the command of the I frame (S1 & S2 bits) | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 718 */ | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 719 switch (frame->buf[(frame->o_buf/8)+3] & 0x03) | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 720 { | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 721 case I_FRAME_RR: | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 722 TRACE_4_PARA("I-RR s:%d len:%d nr:%d ns:%d", *sapi, BYTELEN(frame->l_buf), *nr, *ns); | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 723 *command = I_RR; | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 724 break; | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 725 | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 726 case I_FRAME_ACK: | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 727 TRACE_4_PARA("I-ACK s:%d len:%d nr:%d ns:%d", *sapi, BYTELEN(frame->l_buf), *nr, *ns); | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 728 *command = I_ACK; | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 729 break; | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 730 | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 731 case I_FRAME_RNR: | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 732 TRACE_4_PARA("I-RNR s:%d len:%d nr:%d ns:%d", *sapi, BYTELEN(frame->l_buf), *nr, *ns); | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 733 *command = I_RNR; | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 734 break; | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 735 | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 736 case I_FRAME_SACK: | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 737 TRACE_4_PARA("I-SACK s:%d len:%d nr:%d ns:%d", *sapi, BYTELEN(frame->l_buf), *nr, *ns); | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 738 *command = I_SACK; | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 739 | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 740 /* | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 741 * Check if the frame contains enough octets to access the complete | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 742 * I frame SACK control field. K is at octet I_CTRL_MIN_OCTETS + 1 | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 743 * and there must be at least K+1 octets within the bitmap. Therefore | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 744 * the frame must contain a minimum of I_CTRL_MIN_OCTETS+2. | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 745 */ | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 746 if (frame->l_buf/8 < I_CTRL_MIN_OCTETS+2) | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 747 { | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 748 *frame_ok = FALSE; | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 749 return; | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 750 } | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 751 | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 752 /* | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 753 * min_length is being modified to be more accurate for SACK frames, | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 754 * according to the Bitmap Length Indicator K in | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 755 * frame->buf[(frame->o_buf/8)+4]. | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 756 */ | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 757 min_length += (frame->buf[(frame->o_buf/8)+4] & 0x1F) + 1; | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 758 | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 759 check_length = TRUE; | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 760 break; | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 761 | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 762 default: | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 763 /* | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 764 * Frame rejection condition due to receipt of a command or | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 765 * response field that is undefined or not implemented (set | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 766 * W3 bit to 1). | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 767 * <R.LLC.XCEPTION.A.002> | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 768 */ | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 769 *frame_ok = FALSE; | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 770 *frame_rej = FRAME_REJ_W3; | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 771 return; | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 772 } | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 773 } | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 774 else if ((frame->buf[(frame->o_buf/8)+1] & S_FRAME_MASK) EQ S_FRAME_ID) | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 775 { | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 776 /* | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 777 * S frame, fixed 3 octets (1 Address, 2 Control, 0 Information, no FCS) | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 778 */ | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 779 *pdu_type = S_FRAME; | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 780 min_length = S_FRAME_MIN_OCTETS_WITHOUT_FCS; | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 781 *frame_rej_ctrl_length = S_CTRL_OCTETS; | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 782 | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 783 /* | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 784 * Extract A bit (stored in P/F bit) | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 785 */ | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 786 *pf_bit = (frame->buf[(frame->o_buf/8)+1] & 0x20) >> 5; | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 787 | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 788 /* | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 789 * Check if the frame contains enough octets to access the complete | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 790 * S frame control field. | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 791 */ | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 792 if (frame->l_buf/8 < S_CTRL_MIN_OCTETS) | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 793 { | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 794 *frame_ok = FALSE; | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 795 *frame_rej = FRAME_REJ_W1; | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 796 *frame_rej_ctrl_length = frame->l_buf/8 - 1; | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 797 return; | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 798 } | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 799 | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 800 /* | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 801 * Extract N(R) | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 802 */ | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 803 *nr = (T_FRAME_NUM)(frame->buf[(frame->o_buf/8)+1] & 0x07) << 6; | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 804 *nr |= (T_FRAME_NUM)(frame->buf[(frame->o_buf/8)+2] >> 2); | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 805 | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 806 /* | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 807 * Determine the command of the S frame (S1 & S2 bits) | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 808 */ | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 809 switch (frame->buf[(frame->o_buf/8)+2] & 0x03) | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 810 { | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 811 case I_FRAME_RR: | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 812 TRACE_2_PARA("S-RR s:%d nr:%d", *sapi, *nr); | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 813 *command = I_RR; | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 814 check_length = TRUE; | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 815 break; | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 816 | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 817 case I_FRAME_ACK: | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 818 TRACE_2_PARA("S-ACK s:%d nr:%d", *sapi, *nr); | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 819 *command = I_ACK; | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 820 check_length = TRUE; | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 821 break; | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 822 | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 823 case I_FRAME_RNR: | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 824 TRACE_2_PARA("S-RNR s:%d nr:%d", *sapi, *nr); | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 825 *command = I_RNR; | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 826 check_length = TRUE; | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 827 break; | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 828 | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 829 case I_FRAME_SACK: | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 830 TRACE_2_PARA("S-SACK s:%d nr:%d", *sapi, *nr); | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 831 *command = I_SACK; | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 832 /* | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 833 * min_length is being modified to be more accurate for SACK frames. | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 834 * The S frame SACK format adds a number of up to 32 octets to the | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 835 * control field. | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 836 */ | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 837 min_length += S_FRAME_SACK_MIN_CTRL_OCTETS; | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 838 | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 839 check_length = FALSE; | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 840 break; | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 841 | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 842 default: | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 843 /* | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 844 * Frame rejection condition due to receipt of a command or | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 845 * response field that is undefined or not implemented (set | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 846 * W3 bit to 1). | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 847 * <R.LLC.XCEPTION.A.002> | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 848 */ | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 849 *frame_ok = FALSE; | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 850 *frame_rej = FRAME_REJ_W3; | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 851 return; | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 852 } | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 853 } | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 854 else if ((frame->buf[(frame->o_buf/8)+1] & UI_FRAME_MASK) EQ UI_FRAME_ID) | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 855 { | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 856 /* | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 857 * UI frame, at least 3 octets (1 Address, 2 Control, 0(++) | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 858 * Information, no FCS) | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 859 */ | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 860 *pdu_type = UI_FRAME; | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 861 min_length = UI_FRAME_MIN_OCTETS_WITHOUT_FCS; | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 862 *frame_rej_ctrl_length = UI_CTRL_OCTETS; | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 863 | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 864 /* | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 865 * Check if the frame contains enough octets to access the complete | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 866 * UI frame control field. | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 867 */ | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 868 if (frame->l_buf/8 < UI_CTRL_MIN_OCTETS) | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 869 { | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 870 *frame_ok = FALSE; | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 871 return; | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 872 } | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 873 | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 874 /* | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 875 * Extract N(U) (is stored in N(R)) | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 876 */ | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 877 *nr = (T_FRAME_NUM)(frame->buf[(frame->o_buf/8)+1] & 0x07) << 6; | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 878 *nr |= (T_FRAME_NUM)(frame->buf[(frame->o_buf/8)+2] >> 2); | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 879 | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 880 TRACE_4_PARA("UI s:%d len:%d nr:%d c:%d", *sapi, BYTELEN(frame->l_buf), *nr, cipher); | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 881 } | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 882 else if ((frame->buf[(frame->o_buf/8)+1] & U_FRAME_MASK) EQ U_FRAME_ID) | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 883 { | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 884 /* | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 885 * U frame, at least 2 octets (1 Address, 1 Control, 0(++) | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 886 * Information, no FCS) | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 887 */ | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 888 *pdu_type = U_FRAME; | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 889 min_length = U_FRAME_MIN_OCTETS_WITHOUT_FCS; | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 890 *frame_rej_ctrl_length = U_CTRL_OCTETS; | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 891 | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 892 /* | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 893 * Extract P/F bit | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 894 */ | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 895 *pf_bit = (frame->buf[(frame->o_buf/8)+1] & 0x10) >> 4; | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 896 | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 897 /* | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 898 * Check if the frame contains enough octets to access the complete | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 899 * U frame control field. | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 900 * NOTE: | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 901 * This check could be omitted, because the U frame control field size | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 902 * is only one octet. | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 903 */ | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 904 if (frame->l_buf/8 < U_CTRL_MIN_OCTETS) | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 905 { | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 906 *frame_ok = FALSE; | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 907 *frame_rej = FRAME_REJ_W1; | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 908 return; | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 909 } | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 910 | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 911 /* | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 912 * Determine the command of the U frame (M4, M3, M2, M1). | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 913 * Adjust the minimum length of the frame, if possible. | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 914 */ | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 915 switch (frame->buf[(frame->o_buf/8)+1] & 0x0F) | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 916 { | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 917 case U_FRAME_DM: | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 918 TRACE_1_PARA("DM s:%d", *sapi); | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 919 *command = U_DM; | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 920 /* | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 921 * No information field is permitted. | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 922 */ | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 923 check_length = TRUE; | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 924 break; | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 925 case U_FRAME_DISC: | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 926 TRACE_1_PARA("DISC s:%d", *sapi); | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 927 *command = U_DISC; | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 928 /* | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 929 * No information field is permitted. | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 930 */ | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 931 check_length = TRUE; | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 932 break; | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 933 case U_FRAME_UA: | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 934 TRACE_2_PARA("UA s:%d len:%d", *sapi, BYTELEN(frame->l_buf)); | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 935 *command = U_UA; | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 936 /* | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 937 * No knowledge if an information field is permitted, because | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 938 * this is only the case when UA is the response to SABM. | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 939 */ | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 940 break; | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 941 case U_FRAME_SABM: | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 942 TRACE_2_PARA("SABM s:%d len:%d", *sapi, BYTELEN(frame->l_buf)); | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 943 *command = U_SABM; | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 944 /* | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 945 * An information field is permitted, containing XID | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 946 * parameters. Therefore the size of the information field | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 947 * is not (yet) known. | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 948 */ | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 949 break; | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 950 case U_FRAME_FRMR: | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 951 TRACE_1_PARA("FRMR s:%d", *sapi); | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 952 *command = U_FRMR; | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 953 /* | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 954 * FRMR response contains an information field of 10 octets. | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 955 * <R.LLC.XCEPTION.A.008> | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 956 */ | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 957 min_length += U_FRAME_FRMR_INFO_OCTETS; | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 958 check_length = TRUE; | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 959 break; | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 960 case U_FRAME_XID: | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 961 if( *cr_bit == SGSN_COMMAND ) | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 962 { | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 963 TRACE_2_PARA("XID REQ s:%d len:%d", *sapi, BYTELEN(frame->l_buf)); | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 964 } | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 965 else | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 966 { | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 967 TRACE_2_PARA("XID RSP s:%d len:%d", *sapi, BYTELEN(frame->l_buf)); | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 968 } | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 969 *command = U_XID; | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 970 /* | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 971 * An information field is required, containing XID | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 972 * parameters. Therefore the size of the information field | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 973 * is not (yet) known. | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 974 */ | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 975 break; | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 976 default: | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 977 TRACE_0_INFO("Not supported U frame received"); | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 978 /* | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 979 * Frame rejection condition due to receipt of a command or | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 980 * response field that is undefined or not implemented (set | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 981 * W3 bit to 1). | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 982 * <R.LLC.XCEPTION.A.002> | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 983 */ | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 984 *frame_ok = FALSE; | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 985 *frame_rej = FRAME_REJ_W3; | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 986 return; | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 987 } | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 988 } | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 989 | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 990 | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 991 /* | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 992 * Determine if it is requested to check the frame length exactly | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 993 * (check_length EQ TRUE), or just to check the minimum frame length | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 994 * (check_length EQ FALSE). | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 995 */ | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 996 if (check_length AND (frame->l_buf/8 NEQ min_length)) | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 997 { | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 998 /* | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 999 * Actual length of frame doesn't correspond with computed length. | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1000 */ | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1001 *frame_ok = FALSE; | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1002 | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1003 /* | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1004 * Check if frame rejection condition occured: S or U frame with | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1005 * incorrect length (= W1 + W3 bits). frame_rej_ctrl_length has already | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1006 * been set above to the correct control field length. | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1007 * <R.LLC.XCEPTION.A.002>, <R.LLC.XCEPTION.A.010> | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1008 */ | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1009 if ((*pdu_type EQ S_FRAME) OR (*pdu_type EQ U_FRAME)) | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1010 { | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1011 *frame_rej = FRAME_REJ_W1 | FRAME_REJ_W3; | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1012 } | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1013 return; | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1014 } | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1015 else if (frame->l_buf/8 < min_length) | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1016 { | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1017 /* | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1018 * Frame doesn't contain enough octets to include the address field, | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1019 * control field, information field, and FCS field necessary to constitute | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1020 * a complete frame according to the PDU type. | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1021 * <R.LLC.XCEPTION.A.001> | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1022 */ | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1023 *frame_ok = FALSE; | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1024 return; | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1025 } | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1026 | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1027 return; | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1028 } /* rx_interpret_frame() */ | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1029 | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1030 /* #endif */ /* CF_FAST_EXEC || _SIMULATION_ */ | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1031 | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1032 | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1033 /* | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1034 +------------------------------------------------------------------------------ | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1035 | Function : rx_strip_llc_header | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1036 +------------------------------------------------------------------------------ | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1037 | Description : This procedure strips the LLC header field off of the sdu | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1038 | so that the sdu contains only the remaining L3-PDU. | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1039 | | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1040 | Parameters : sdu - contains the SDU (frame), must be a valid pointer | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1041 | pdu_type - contains the PDU type of the frame, must be | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1042 | a valid PDU type | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1043 | command - contains the command (I/S, U) of the frame, must be | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1044 | a valid command for the given PDU type | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1045 | | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1046 +------------------------------------------------------------------------------ | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1047 */ | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1048 | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1049 #ifndef CF_FAST_EXEC | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1050 | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1051 GLOBAL void rx_strip_llc_header (T_sdu *sdu, | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1052 T_PDU_TYPE pdu_type, | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1053 T_COMMAND command) | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1054 { | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1055 UBYTE header_len = 0; | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1056 | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1057 | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1058 TRACE_FUNCTION ("rx_strip_llc_header"); | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1059 | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1060 switch (pdu_type) | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1061 { | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1062 case I_FRAME: | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1063 /* | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1064 * I frame 4 octets. Leave SACK Bitmap in PDU, will be stripped later! | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1065 * (1 Address, 3Control). | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1066 */ | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1067 header_len = I_CTRL_MIN_OCTETS; | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1068 break; | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1069 case S_FRAME: | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1070 /* | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1071 * S frame 3 octets. Leave SACK Bitmap in PDU, will be stripped later! | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1072 * (1 Address, 2(+32 max) Control). | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1073 */ | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1074 header_len = S_CTRL_MIN_OCTETS; | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1075 break; | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1076 case UI_FRAME: | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1077 /* | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1078 * UI frame, 3 octets (1 Address, 2 Control). | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1079 */ | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1080 header_len = UI_CTRL_MIN_OCTETS; | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1081 break; | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1082 case U_FRAME: | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1083 /* | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1084 * U frame, 2 octets (1 Address, 1 Control). | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1085 */ | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1086 header_len = U_CTRL_MIN_OCTETS; | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1087 break; | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1088 default: | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1089 TRACE_ERROR ("Unknown PDU type"); | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1090 break; | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1091 } | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1092 | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1093 /* | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1094 * Adjust the beginning of the PDU using the determined header_len. | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1095 */ | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1096 sdu->o_buf += header_len * 8; | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1097 | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1098 /* | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1099 * Adjust the length of the PDU by the size of the header field. | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1100 */ | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1101 sdu->l_buf -= header_len * 8; | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1102 | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1103 return; | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1104 } /* rx_strip_llc_header() */ | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1105 | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1106 #endif /* CF_FAST_EXEC */ | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1107 | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1108 /* | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1109 +------------------------------------------------------------------------------ | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1110 | Function : rx_get_desc_octet | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1111 +------------------------------------------------------------------------------ | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1112 | Description : This procedure maps the given linear offset to a descriptor | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1113 | list and returns the value of the octet at this offset. If | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1114 | offset is too large for descriptor list, 0x00 is returned. | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1115 | Each descriptor in descriptor list is evaluated until the | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1116 | requested offset is reached. The resulting octet value is | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1117 | written to the referenced parameter data_ptr (if not set to | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1118 | NULL), and is additionally returned. | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1119 | | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1120 | Parameters : desc_list - a valid pointer to a valid descriptor list | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1121 | offset - linear octet offset, beginning with 0 | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1122 | data_ptr - a valid pointer to be set to the resulting octet | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1123 | value, or NULL | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1124 | | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1125 +------------------------------------------------------------------------------ | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1126 */ | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1127 | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1128 #ifndef CF_FAST_EXEC | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1129 | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1130 GLOBAL UBYTE rx_get_desc_octet (T_desc_list *desc_list, | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1131 USHORT offset, | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1132 UBYTE *data_ptr) | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1133 { | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1134 T_desc *desc; | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1135 UBYTE *desc_data; /* local pointer to data octet */ | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1136 | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1137 /* | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1138 * Check if offset is contained in descriptor list. Return 0x00 if not. | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1139 */ | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1140 if (offset >= desc_list->list_len) | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1141 { | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1142 TRACE_ERROR ("offset too large for descriptor list"); | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1143 return 0x00; | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1144 } | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1145 | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1146 /* | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1147 * Search requested data with given linear offset in descriptor list. | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1148 * Empty descriptors are skipped. Check for each descriptor if requested | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1149 * offset is in descriptor, until it is found. | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1150 */ | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1151 desc = (T_desc *)desc_list->first; | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1152 desc_data = NULL; | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1153 do | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1154 { | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1155 if (offset < desc->len) | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1156 { | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1157 /* | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1158 * Requested data is in current descriptor. Set desc_data to point to | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1159 * requested octet with remaining offset (has been decremented by | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1160 * already passed descriptor payload). | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1161 */ | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1162 /*lint -e662 Possible creation of out-of-bounds pointer */ | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1163 desc_data = &(desc->buffer[offset]); | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1164 } | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1165 else | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1166 { | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1167 /* | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1168 * Requested data is not in current descriptor. Remember data payload | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1169 * of current descriptor as already passed. | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1170 */ | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1171 offset -= desc->len; | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1172 } | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1173 | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1174 desc = (T_desc *)desc->next; | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1175 } | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1176 while ((desc NEQ NULL) AND (desc_data EQ NULL)); | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1177 | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1178 | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1179 if (desc_data EQ NULL) | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1180 { | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1181 TRACE_ERROR ("descriptor list ended before offset found"); | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1182 | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1183 if (data_ptr NEQ NULL) | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1184 { | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1185 *data_ptr = 0; | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1186 } | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1187 | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1188 return 0; | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1189 } | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1190 else | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1191 { | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1192 /* | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1193 * Store value of found octet in data_ptr, if pointer is valid. | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1194 */ | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1195 if (data_ptr NEQ NULL) | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1196 { | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1197 /*lint -e661 Possible access of out-of-bounds pointer */ | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1198 *data_ptr = *desc_data; | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1199 } | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1200 | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1201 return *desc_data; | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1202 } | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1203 } /* rx_get_desc_octet() */ | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1204 | 
| 
219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1205 #endif /* CF_FAST_EXEC */ | 
