FreeCalypso > hg > fc-selenite
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() */ |