comparison src/g23m-gprs/llc/llc_llmef.c @ 1:d393cd9bb723

src/g23m-*: initial import from Magnetite
author Mychaela Falconia <falcon@freecalypso.org>
date Sun, 15 Jul 2018 04:40:46 +0000
parents
children
comparison
equal deleted inserted replaced
0:b6a5e36de839 1:d393cd9bb723
1 /*
2 +-----------------------------------------------------------------------------
3 | Project :
4 | Modul :
5 +-----------------------------------------------------------------------------
6 | Copyright 2002 Texas Instruments Berlin, AG
7 | All rights reserved.
8 |
9 | This file is confidential and a trade secret of Texas
10 | Instruments Berlin, AG
11 | The receipt of or possession of this file does not convey
12 | any rights to reproduce or disclose its contents or to
13 | manufacture, use, or sell anything it may describe, in
14 | whole, or in part, without the specific written consent of
15 | Texas Instruments Berlin, AG.
16 +-----------------------------------------------------------------------------
17 | Purpose : This modul is part of the entity LLC and implements all
18 | procedures and functions as described in the
19 | SDL-documentation (LLME-statemachine)
20 +-----------------------------------------------------------------------------
21 */
22
23 #ifndef LLC_LLMEF_C
24 #define LLC_LLMEF_C
25 #endif
26
27 #define ENTITY_LLC
28
29 /*==== INCLUDES =============================================================*/
30
31 #include <string.h> /* to get memcpy() */
32
33 #include "typedefs.h" /* to get Condat data types */
34 #include "vsi.h" /* to get a lot of macros */
35 #include "macdef.h"
36 #include "gprs.h"
37 #include "gsm.h" /* to get a lot of macros */
38 #include "cnf_llc.h" /* to get cnf-definitions */
39 #include "mon_llc.h" /* to get mon-definitions */
40 #include "prim.h" /* to get the definitions of used SAP and directions */
41 #include "llc.h" /* to get the global entity definitions */
42
43 #include "llc_par.h" /* to get the default values of the LLC paramters */
44
45 /*==== CONST ================================================================*/
46
47 /*==== LOCAL VARS ===========================================================*/
48
49 /*==== PRIVATE FUNCTIONS ====================================================*/
50
51 /*==== PUBLIC FUNCTIONS =====================================================*/
52
53
54
55 /*
56 +------------------------------------------------------------------------------
57 | Function : llme_init
58 +------------------------------------------------------------------------------
59 | Description : This procedure initialises all necessary variables of llme for
60 | all SAPIs.
61 | Also global variables are initialised that relate not to a
62 | specific service (e.g. tlli_new/tlli_old).
63 |
64 | Parameters :
65 |
66 +------------------------------------------------------------------------------
67 */
68 GLOBAL void llme_init (void)
69 {
70 int n;
71
72 TRACE_FUNCTION( "llme_init" );
73
74 /*
75 * Initialise service LLME with state TLLI_UNASSIGNED.
76 */
77 INIT_STATE (LLME, LLME_TLLI_UNASSIGNED);
78
79 /*
80 * Initialise global variables.
81 */
82 llc_data->suspended = FALSE;
83 llc_data->grlc_suspended = FALSE;
84
85 #ifdef LL_2to1
86 llc_data->tlli_new = PS_TLLI_INVALID;
87 llc_data->tlli_old = PS_TLLI_INVALID;
88 #else
89 llc_data->tlli_new = LL_TLLI_INVALID;
90 llc_data->tlli_old = LL_TLLI_INVALID;
91 #endif
92
93 llc_data->ciphering_algorithm = LLGMM_CIPHER_NO_ALGORITHM;
94 #ifdef LL_2to1
95 memset (&(llc_data->kc), 0, sizeof(T_LLGMM_llgmm_kc));
96 #else
97 memset (&(llc_data->kc), 0, sizeof(T_llgmm_kc));
98 #endif
99
100 /* init current values */
101 #ifdef REL99
102 llc_data->cur_pfi = LL_PFI_SIGNALING;
103 #endif
104 llc_data->cur_qos.delay = LL_DELAY_SUB;
105 llc_data->cur_qos.relclass = LL_NO_REL;
106 llc_data->cur_qos.peak = LL_PEAK_SUB;
107 llc_data->cur_qos.preced = LL_PRECED_SUB;
108 llc_data->cur_qos.mean = LL_MEAN_SUB;
109 llc_data->cur_radio_prio = LL_RADIO_PRIO_1;
110
111 /*
112 * Initialise all the global SAPI data, which is
113 * not related to only one service
114 */
115 for (n=0; n < MAX_SAPI_INC; n++)
116 {
117 SWITCH_SERVICE (llc, sapi, n);
118
119 llc_data->sapi->vur = 0;
120
121 llc_data->sapi->va = 0;
122 llc_data->sapi->vs = 0;
123 llc_data->sapi->vr = 0;
124
125 llc_data->sapi->oc_ui_tx = 0L;
126 llc_data->sapi->oc_ui_rx = 0L;
127 llc_data->sapi->oc_i_tx = 0L;
128 llc_data->sapi->oc_i_rx = 0L;
129
130 llc_data->sapi->pbit_outstanding = FALSE;
131 }
132
133 return;
134 } /* llme_init() */
135
136
137
138 /*
139 +------------------------------------------------------------------------------
140 | Function : llme_init_cipher
141 +------------------------------------------------------------------------------
142 | Description : This procedure initialises the global LLC variables llc_kc
143 | (ciphering key Kc) and llc_ciphering_algorithm (ciphering
144 | algorithm). If ciphering_algorithm is LLGMM_CIPH_NA, the
145 | parameters are ignored and the procedure doesn't change
146 | anything. The procedures cipher_ll_pdu (service send_pdu)
147 | and decipher_ll_pdu (service receive_pdu) use the global
148 | variables for ciphering and deciphering.
149 |
150 | Parameters : kc - ciphering key
151 | ciphering_algorithm - ciphering algorithm
152 |
153 +------------------------------------------------------------------------------
154 */
155 #ifdef LL_2to1
156 GLOBAL void llme_init_cipher (T_LLGMM_llgmm_kc kc, UBYTE ciphering_algorithm)
157 #else
158 GLOBAL void llme_init_cipher (T_llgmm_kc kc, UBYTE ciphering_algorithm)
159 #endif
160 {
161 TRACE_FUNCTION( "llme_init_cipher" );
162
163 if (ciphering_algorithm != LLGMM_CIPHER_NA)
164 {
165 switch (ciphering_algorithm)
166 {
167 case LLGMM_CIPHER_NO_ALGORITHM:
168 TRACE_0_INFO("No cipher algorithm used!");
169 break;
170
171 case LLGMM_CIPHER_GPRS_A5_1:
172 TRACE_0_INFO("Cipher algorithm GEA/1 used!");
173 break;
174
175 case LLGMM_CIPHER_GPRS_A5_2:
176 TRACE_0_INFO("Cipher algorithm GEA/2 used!");
177 break;
178
179 default:
180 TRACE_ERROR("Unknown Cipher algorithm used!");
181 break;
182 }
183
184 /*
185 * Set IOV default values, if kc is changed to a different value
186 */
187 #ifdef LL_2to1
188 if ( memcmp (&(llc_data->kc), &kc, sizeof(T_LLGMM_llgmm_kc)) )
189 #else
190 if ( memcmp (&(llc_data->kc), &kc, sizeof(T_llgmm_kc)) )
191 #endif
192 {
193 TRACE_0_INFO( "kc changed" );
194 #ifdef LL_2to1
195 memcpy (&(llc_data->kc), &kc, sizeof(T_LLGMM_llgmm_kc));
196 #else
197 memcpy (&(llc_data->kc), &kc, sizeof(T_llgmm_kc));
198 #endif
199
200 /*
201 * Apply the default value of IOV-UI in case no negotiation
202 * is started by the SGSN.
203 * <R.LLC.LLC_PAR.A.016>
204 */
205 llc_data->iov_ui = LLC_IOV_UI_ALL_SAPIS;
206
207 /*
208 * Apply the default value of IOV-I in case no negotiation
209 * is started by the SGSN.
210 * <R.LLC.LLC_PAR.A.018>
211 */
212 #ifdef LL_2to1
213 llc_data->iov_i_base[IMAP(PS_SAPI_3)] = LLC_IOV_I_SAPI_3;
214 llc_data->iov_i_base[IMAP(PS_SAPI_5)] = LLC_IOV_I_SAPI_5;
215 llc_data->iov_i_base[IMAP(PS_SAPI_9)] = LLC_IOV_I_SAPI_9;
216 llc_data->iov_i_base[IMAP(PS_SAPI_11)] = LLC_IOV_I_SAPI_11;
217 #else
218 llc_data->iov_i_base[IMAP(LL_SAPI_3)] = LLC_IOV_I_SAPI_3;
219 llc_data->iov_i_base[IMAP(LL_SAPI_5)] = LLC_IOV_I_SAPI_5;
220 llc_data->iov_i_base[IMAP(LL_SAPI_9)] = LLC_IOV_I_SAPI_9;
221 llc_data->iov_i_base[IMAP(LL_SAPI_11)] = LLC_IOV_I_SAPI_11;
222 #endif
223 }
224
225 /*
226 * Set new ciphering algorithm
227 */
228 llc_data->ciphering_algorithm = ciphering_algorithm;
229 }
230 else
231 {
232 TRACE_0_INFO("Cipher algorithm not changed");
233 }
234
235 return;
236 } /* llme_init_cipher() */