comparison src/g23m-gprs/gmm/gmm_f.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 : GPRS (8441)
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 GRR and implements all
18 | procedures and functions as described in the
19 | SDL-documentation (-statemachine)
20 +-----------------------------------------------------------------------------
21 */
22
23
24
25 #ifndef GMM_F_C
26 #define GMM_F_C
27 #endif
28
29 #define ENTITY_GMM
30
31 /*==== INCLUDES =============================================================*/
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 "ccdapi.h" /* to get CCD API */
39 #include "cnf_gmm.h" /* to get cnf-definitions */
40 #include "mon_gmm.h" /* to get mon-definitions */
41 #include "prim.h" /* to get the definitions of used SAP and directions */
42 #include "gmm.h" /* to get the global entity definitions */
43
44 #include "gmm_f.h"
45 #include <stdlib.h> /* JK, delete warnings: to get rand() */
46
47 /*==== CONST ================================================================*/
48
49 /*==== DIAGNOSTICS ==========================================================*/
50
51 #ifndef TRACE_INFO /* only used in local environment */
52 # define TRACE_INFO(x)
53 #endif
54
55 #ifndef TRACE_COMMENT /* only used in local environment */
56 # define TRACE_COMMENT(x)
57 #endif
58
59
60 /*==== LOCAL VARS ===========================================================*/
61
62 /*==== PRIVATE FUNCTIONS ====================================================*/
63
64 /*==== PUBLIC FUNCTIONS =====================================================*/
65 /*
66 +------------------------------------------------------------------------------
67 | Function : gmm_set_current_tlli
68 +------------------------------------------------------------------------------
69 | Description : derives the current TLLI with the given TLLI type and saves
70 | the old TLLI
71 |
72 | Parameters : tlli_type - the wanted TLLI type
73 |
74 +------------------------------------------------------------------------------
75 */
76 GLOBAL void gmm_set_current_tlli ( T_TLLI_TYPE tlli_type )
77 {
78 GMM_TRACE_FUNCTION ("gmm_set_current_tlli");
79
80 gmm_data->tlli.old = gmm_data->tlli.current,
81 gmm_data->tlli.current = gmm_get_tlli ( tlli_type );
82
83 GMM_TRACE_GMM_DATA(GMM_DEBUG_PRINT_MASK_TLLI);
84
85 GMM_RETURN;
86 } /* gmm_set_current_tlli */
87
88
89 /*
90 +------------------------------------------------------------------------------
91 | Function : gmm_get_tlli
92 +------------------------------------------------------------------------------
93 | Description : returns the wanted TLLI
94 |
95 | Parameters : tlli_type - the wanted TLLI type
96 |
97 +------------------------------------------------------------------------------
98 */
99 GLOBAL ULONG gmm_get_tlli ( T_TLLI_TYPE tlli_type )
100 {
101 GMM_TRACE_FUNCTION ("gmm_get_tlli()");
102
103 /*
104 * the random tlli must be created
105 */
106
107 if ( GMMRR_TMSI_INVALID == gmm_data->ptmsi.current
108 /*
109 * the random tlli must be created
110 */
111
112 && tlli_type != RANDOM_TLLI
113 && tlli_type != CURRENT_TLLI )
114 {
115 gmm_data->ptmsi.current= GMMRR_TMSI_INVALID;
116 gmm_data->ptmsi.new_grr = GMMRR_TMSI_INVALID;
117 gmm_data->ptmsi.old = GMMRR_TMSI_INVALID;
118 gmm_data->tlli.current_type = INVALID_TLLI;
119 TRACE_0_OUT_PARA ("first tlli used");
120 GMM_RETURN_ ( LLGMM_TLLI_INVALID);
121 }
122 else
123 {
124 /* gmm_data->ptmsi.v_mid = TRUE; */
125
126 switch ( tlli_type )
127 {
128 case LOCAL_TLLI:
129 gmm_data->tlli.current_type = tlli_type;
130
131 gmm_data->tlli.current = gmm_data->ptmsi.current | LOCAL_TLLI_SET_MASK;
132 gmm_data->tlli.current &= LOCAL_TLLI_RES_MASK;
133 TRACE_0_OUT_PARA("local tlli used");
134 break;
135 case FOREIGN_TLLI:
136 gmm_data->tlli.current_type = tlli_type;
137
138 gmm_data->tlli.current = gmm_data->ptmsi.current | FOREIGN_TLLI_SET_MASK;
139 gmm_data->tlli.current &= FOREIGN_TLLI_RES_MASK;
140 TRACE_0_OUT_PARA ("foreign tlli used");
141 break;
142 case RANDOM_TLLI:
143 gmm_data->tlli.current_type = CURRENT_TLLI;
144
145 #ifdef _SIMULATION_
146 /* This number is a very random number */
147 gmm_data->ptmsi.current = 0x06081997L;
148 #else
149 gmm_data->ptmsi.current = (rand()<<16) +rand();
150 #endif
151
152 gmm_data->tlli.current = gmm_data->ptmsi.current | RANDOM_TLLI_SET_MASK;
153 gmm_data->tlli.current &= RANDOM_TLLI_RES_MASK;
154 gmm_data->ptmsi.current = GMMRR_TMSI_INVALID;
155 gmm_data->ptmsi.old = GMMRR_TMSI_INVALID;
156
157 TRACE_0_OUT_PARA ("random tlli used");
158 break;
159 case OLD_TLLI:
160 GMM_RETURN_ (gmm_data->tlli.old);
161 case CURRENT_TLLI:
162 GMM_RETURN_ (gmm_data->tlli.current)/*gmm_get_tlli ( gmm_data->tlli.current_type )*/;
163 case INVALID_TLLI:
164 TRACE_0_OUT_PARA ("first tlli used");
165 GMM_RETURN_ (LLGMM_TLLI_INVALID);
166 default:
167 TRACE_ERROR ("WRONG TLLI TYPE received");
168 break;
169 }
170 GMM_RETURN_ (gmm_data->tlli.current);
171 }
172 } /* gmm_get_tlli */
173
174 /*
175 +------------------------------------------------------------------------------
176 | Function : gmm_debug_do_print_gmm_data
177 +------------------------------------------------------------------------------
178 | Description : prints gmm data control block
179 |
180 | Parameters : print mask: select type of information to be printed
181 |
182 +------------------------------------------------------------------------------
183 */
184 GLOBAL void gmm_debug_do_print_gmm_data(GMM_DEBUG_PRINT_MASK_ENUM_TYPE print_mask)
185 {
186 /*
187 * COMMON
188 */
189 if (print_mask & GMM_DEBUG_PRINT_MASK_COMMON)
190 {
191 TRACE_1_DATA("* Version : %u", gmm_data->version);
192 TRACE_1_DATA("* Cipher : %u", gmm_data->cipher);
193 }
194 /*
195 * STATE
196 */
197 if (print_mask & GMM_DEBUG_PRINT_MASK_STATE)
198 {
199 #ifndef NTRACE
200 TRACE_1_DATA("* Kern State : %s", gmm_data->kern.state_name);
201 TRACE_1_DATA("* TX State : %s", gmm_data->tx.state_name);
202 TRACE_1_DATA("* RX State : %s", gmm_data->rx.state_name);
203 TRACE_1_DATA("* RDY State : %s", gmm_data->rdy.state_name);
204 TRACE_1_DATA("* SYNC State : %s", gmm_data->sync.state_name);
205 #endif
206 }
207 /*
208 * TLLI
209 */
210 if (print_mask & GMM_DEBUG_PRINT_MASK_TLLI)
211 {
212 TRACE_1_DATA("* TLLI current : %#x", gmm_data->tlli.current);
213 TRACE_1_DATA("* TLLI old : %#x", gmm_data->tlli.old);
214 switch (gmm_data->tlli.current_type)
215 {
216 case LOCAL_TLLI: TRACE_0_DATA("* TLLI type : LOCAL"); break;
217 case FOREIGN_TLLI: TRACE_0_DATA("* TLLI type : FOREIGN"); break;
218 case RANDOM_TLLI: TRACE_0_DATA("* TLLI type : RANDOM"); break;
219 case CURRENT_TLLI: TRACE_0_DATA("* TLLI type : CURRENT"); break;
220 case OLD_TLLI: TRACE_0_DATA("* TLLI type : OLD"); break;
221 case INVALID_TLLI: TRACE_0_DATA("* TLLI type : INVALID"); break;
222 default:
223 TRACE_1_DATA("* TLLI type : %u unknown!", gmm_data->tlli.current_type);
224 }
225 }
226 /*
227 * IMSI
228 */
229 if (print_mask & GMM_DEBUG_PRINT_MASK_IMSI)
230 {
231 TRACE_8_DATA("* IMSI[]: %1d %1d %1d %1d %1d %1d %1d %1d",
232 gmm_data->imsi.id[0], gmm_data->imsi.id[1],
233 gmm_data->imsi.id[2], gmm_data->imsi.id[3],
234 gmm_data->imsi.id[4], gmm_data->imsi.id[5],
235 gmm_data->imsi.id[6], gmm_data->imsi.id[7]);
236 TRACE_8_DATA("* IMSI[]: %1d %1d %1d %1d %1d %1d %1d %1d",
237 gmm_data->imsi.id[8], gmm_data->imsi.id[9],
238 gmm_data->imsi.id[10], gmm_data->imsi.id[11],
239 gmm_data->imsi.id[12], gmm_data->imsi.id[13],
240 gmm_data->imsi.id[14], gmm_data->imsi.id[15]);
241 }
242 /*
243 * P-TMSI
244 */
245 if (print_mask & GMM_DEBUG_PRINT_MASK_PTMSI)
246 {
247 TRACE_1_DATA("* PTMSI current: %#x", gmm_data->ptmsi.current);
248 TRACE_1_DATA("* PTMSI old : %#x", gmm_data->ptmsi.old);
249 TRACE_1_DATA("* PTMSI grr : %#x", gmm_data->ptmsi.new_grr);
250 }
251 /*
252 * CID
253 */
254 if (print_mask & GMM_DEBUG_PRINT_MASK_CID)
255 {
256 TRACE_0_DATA("* kern. cid rac lac mcc mnc");
257 TRACE_9_DATA("* cell_id %#6x %#6x %#6x %1x%1x%1x %1x%1x%1x",
258 gmm_data->kern.cell_id.cid,
259 gmm_data->kern.cell_id.rac,
260 gmm_data->kern.cell_id.lac,
261 gmm_data->kern.cell_id.plmn.mcc[0],
262 gmm_data->kern.cell_id.plmn.mcc[1],
263 gmm_data->kern.cell_id.plmn.mcc[2],
264 gmm_data->kern.cell_id.plmn.mnc[0],
265 gmm_data->kern.cell_id.plmn.mnc[1],
266 gmm_data->kern.cell_id.plmn.mnc[2]);
267 TRACE_9_DATA("* mm_cell_env %#6x %#6x %#6x %1x%1x%1x %1x%1x%1x",
268 gmm_data->kern.mm_cell_env.cid,
269 gmm_data->kern.mm_cell_env.rai.rac,
270 gmm_data->kern.mm_cell_env.rai.lac,
271 gmm_data->kern.mm_cell_env.rai.plmn.mcc[0],
272 gmm_data->kern.mm_cell_env.rai.plmn.mcc[1],
273 gmm_data->kern.mm_cell_env.rai.plmn.mcc[2],
274 gmm_data->kern.mm_cell_env.rai.plmn.mnc[0],
275 gmm_data->kern.mm_cell_env.rai.plmn.mnc[1],
276 gmm_data->kern.mm_cell_env.rai.plmn.mnc[2]);
277 TRACE_9_DATA("* sig_cell_info.env %#6x %#6x %#6x %1x%1x%1x %1x%1x%1x",
278 gmm_data->kern.sig_cell_info.env.cid,
279 gmm_data->kern.sig_cell_info.env.rai.rac,
280 gmm_data->kern.sig_cell_info.env.rai.lac,
281 gmm_data->kern.sig_cell_info.env.rai.plmn.mcc[0],
282 gmm_data->kern.sig_cell_info.env.rai.plmn.mcc[1],
283 gmm_data->kern.sig_cell_info.env.rai.plmn.mcc[2],
284 gmm_data->kern.sig_cell_info.env.rai.plmn.mnc[0],
285 gmm_data->kern.sig_cell_info.env.rai.plmn.mnc[1],
286 gmm_data->kern.sig_cell_info.env.rai.plmn.mnc[2]);
287 TRACE_9_DATA("* old_sig_cell_info.env %#6x %#6x %#6x %1x%1x%1x %1x%1x%1x",
288 gmm_data->kern.old_sig_cell_info.env.cid,
289 gmm_data->kern.old_sig_cell_info.env.rai.rac,
290 gmm_data->kern.old_sig_cell_info.env.rai.lac,
291 gmm_data->kern.old_sig_cell_info.env.rai.plmn.mcc[0],
292 gmm_data->kern.old_sig_cell_info.env.rai.plmn.mcc[1],
293 gmm_data->kern.old_sig_cell_info.env.rai.plmn.mcc[2],
294 gmm_data->kern.old_sig_cell_info.env.rai.plmn.mnc[0],
295 gmm_data->kern.old_sig_cell_info.env.rai.plmn.mnc[1],
296 gmm_data->kern.old_sig_cell_info.env.rai.plmn.mnc[2]);
297 TRACE_0_DATA("* sync. cid rac lac mcc mnc");
298 TRACE_8_DATA("* mm_cell_info %#6x ------ %#6x %1x%1x%1x %1x%1x%1x",
299 gmm_data->sync.mm_cell_info.cid,
300 gmm_data->sync.mm_cell_info.lac,
301 gmm_data->sync.mm_cell_info.plmn.mcc[0],
302 gmm_data->sync.mm_cell_info.plmn.mcc[1],
303 gmm_data->sync.mm_cell_info.plmn.mcc[2],
304 gmm_data->sync.mm_cell_info.plmn.mnc[0],
305 gmm_data->sync.mm_cell_info.plmn.mnc[1],
306 gmm_data->sync.mm_cell_info.plmn.mnc[2]);
307 TRACE_9_DATA("* grr_cell_info.cell_env %#6x %#6x %#6x %1x%1x%1x %1x%1x%1x",
308 gmm_data->sync.grr_cell_info.cell_env.cid,
309 gmm_data->sync.grr_cell_info.cell_env.rai.rac,
310 gmm_data->sync.grr_cell_info.cell_env.rai.lac,
311 gmm_data->sync.grr_cell_info.cell_env.rai.plmn.mcc[0],
312 gmm_data->sync.grr_cell_info.cell_env.rai.plmn.mcc[1],
313 gmm_data->sync.grr_cell_info.cell_env.rai.plmn.mcc[2],
314 gmm_data->sync.grr_cell_info.cell_env.rai.plmn.mnc[0],
315 gmm_data->sync.grr_cell_info.cell_env.rai.plmn.mnc[1],
316 gmm_data->sync.grr_cell_info.cell_env.rai.plmn.mnc[2]);
317 TRACE_9_DATA("* sig_cell_info.env %#6x %#6x %#6x %1x%1x%1x %1x%1x%1x",
318 gmm_data->sync.sig_cell_info.env.cid,
319 gmm_data->sync.sig_cell_info.env.rai.rac,
320 gmm_data->sync.sig_cell_info.env.rai.lac,
321 gmm_data->sync.sig_cell_info.env.rai.plmn.mcc[0],
322 gmm_data->sync.sig_cell_info.env.rai.plmn.mcc[1],
323 gmm_data->sync.sig_cell_info.env.rai.plmn.mcc[2],
324 gmm_data->sync.sig_cell_info.env.rai.plmn.mnc[0],
325 gmm_data->sync.sig_cell_info.env.rai.plmn.mnc[1],
326 gmm_data->sync.sig_cell_info.env.rai.plmn.mnc[2]);
327
328 TRACE_0_DATA("* kern.attach_cap. rac lac mcc mnc");
329 TRACE_8_DATA("* rai_accepted %#6x %#6x %1x%1x%1x %1x%1x%1x",
330 gmm_data->kern.attach_cap.rai_accepted.rac,
331 gmm_data->kern.attach_cap.rai_accepted.lac,
332 gmm_data->kern.attach_cap.rai_accepted.mcc[0],
333 gmm_data->kern.attach_cap.rai_accepted.mcc[1],
334 gmm_data->kern.attach_cap.rai_accepted.mcc[2],
335 gmm_data->kern.attach_cap.rai_accepted.mnc[0],
336 gmm_data->kern.attach_cap.rai_accepted.mnc[1],
337 gmm_data->kern.attach_cap.rai_accepted.mnc[2]);
338 }
339 /*
340 * RAI
341 */
342 /*
343 * KERN ATTACH CAPABILITIES
344 */
345 if (print_mask & GMM_DEBUG_PRINT_MASK_KERN_ATTACH)
346 {
347 }
348 }