blob: f2faefc3f07ddc85c4e37ba4b630b78572b660b4 [file] [log] [blame]
Jacob Erlbecke04e0b02015-05-06 18:30:48 +02001/*
2 * MsTest.cpp
3 *
4 * Copyright (C) 2015 by Sysmocom s.f.m.c. GmbH
5 *
6 * All Rights Reserved
7 *
8 * This program is free software; you can redistribute it and/or modify
9 * it under the terms of the GNU Affero General Public License as published by
10 * the Free Software Foundation; either version 3 of the License, or
11 * (at your option) any later version.
12 *
13 * This program is distributed in the hope that it will be useful,
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 * GNU General Public License for more details.
17 *
18 * You should have received a copy of the GNU Affero General Public License
19 * along with this program. If not, see <http://www.gnu.org/licenses/>.
20 *
21 */
22
23#include "tbf.h"
24#include "gprs_debug.h"
25#include "gprs_ms.h"
Jacob Erlbeck53670862015-05-12 17:54:33 +020026#include "gprs_ms_storage.h"
Jacob Erlbeck70b96aa2015-06-12 10:52:34 +020027#include "bts.h"
Jacob Erlbecke04e0b02015-05-06 18:30:48 +020028
29extern "C" {
30#include "pcu_vty.h"
31
32#include <osmocom/core/application.h>
33#include <osmocom/core/msgb.h>
34#include <osmocom/core/talloc.h>
35#include <osmocom/core/utils.h>
36#include <osmocom/vty/vty.h>
37}
38
39#include <errno.h>
Jacob Erlbeckd9e10242015-05-28 15:43:53 +020040#include <unistd.h>
Jacob Erlbecke04e0b02015-05-06 18:30:48 +020041
42void *tall_pcu_ctx;
43int16_t spoof_mnc = 0, spoof_mcc = 0;
44
45static void test_ms_state()
46{
47 uint32_t tlli = 0xffeeddbb;
48 gprs_rlcmac_dl_tbf *dl_tbf;
49 gprs_rlcmac_ul_tbf *ul_tbf;
50 GprsMs *ms;
51
52 printf("=== start %s ===\n", __func__);
53
Jacob Erlbeck17214bb2015-06-02 14:06:12 +020054 ms = new GprsMs(NULL, tlli);
Jacob Erlbecke04e0b02015-05-06 18:30:48 +020055 OSMO_ASSERT(ms->is_idle());
56
57 dl_tbf = talloc_zero(tall_pcu_ctx, struct gprs_rlcmac_dl_tbf);
58 dl_tbf->direction = GPRS_RLCMAC_DL_TBF;
59 ul_tbf = talloc_zero(tall_pcu_ctx, struct gprs_rlcmac_ul_tbf);
60 ul_tbf->direction = GPRS_RLCMAC_UL_TBF;
61
62 ms->attach_tbf(ul_tbf);
63 OSMO_ASSERT(!ms->is_idle());
64 OSMO_ASSERT(ms->ul_tbf() == ul_tbf);
65 OSMO_ASSERT(ms->dl_tbf() == NULL);
66
67 ms->attach_tbf(dl_tbf);
68 OSMO_ASSERT(!ms->is_idle());
69 OSMO_ASSERT(ms->ul_tbf() == ul_tbf);
70 OSMO_ASSERT(ms->dl_tbf() == dl_tbf);
71
72 ms->detach_tbf(ul_tbf);
73 OSMO_ASSERT(!ms->is_idle());
74 OSMO_ASSERT(ms->ul_tbf() == NULL);
75 OSMO_ASSERT(ms->dl_tbf() == dl_tbf);
76
77 ms->detach_tbf(dl_tbf);
78 /* The ms object is freed now */
79 ms = NULL;
80
81 talloc_free(dl_tbf);
82 talloc_free(ul_tbf);
83
84 printf("=== end %s ===\n", __func__);
85}
86
87static void test_ms_callback()
88{
89 uint32_t tlli = 0xffeeddbb;
90 gprs_rlcmac_dl_tbf *dl_tbf;
91 gprs_rlcmac_ul_tbf *ul_tbf;
92 GprsMs *ms;
93 static enum {UNKNOWN, IS_IDLE, IS_ACTIVE} last_cb = UNKNOWN;
94
95 struct MyCallback: public GprsMs::Callback {
96 virtual void ms_idle(class GprsMs *ms) {
97 OSMO_ASSERT(ms->is_idle());
98 printf(" ms_idle() was called\n");
99 last_cb = IS_IDLE;
100 }
101 virtual void ms_active(class GprsMs *ms) {
102 OSMO_ASSERT(!ms->is_idle());
103 printf(" ms_active() was called\n");
104 last_cb = IS_ACTIVE;
105 }
106 } cb;
107
108 printf("=== start %s ===\n", __func__);
109
Jacob Erlbeck17214bb2015-06-02 14:06:12 +0200110 ms = new GprsMs(NULL, tlli);
Jacob Erlbecke04e0b02015-05-06 18:30:48 +0200111 ms->set_callback(&cb);
112
113 OSMO_ASSERT(ms->is_idle());
114
115 dl_tbf = talloc_zero(tall_pcu_ctx, struct gprs_rlcmac_dl_tbf);
116 dl_tbf->direction = GPRS_RLCMAC_DL_TBF;
117 ul_tbf = talloc_zero(tall_pcu_ctx, struct gprs_rlcmac_ul_tbf);
118 ul_tbf->direction = GPRS_RLCMAC_UL_TBF;
119
120 OSMO_ASSERT(last_cb == UNKNOWN);
121
122 ms->attach_tbf(ul_tbf);
123 OSMO_ASSERT(!ms->is_idle());
124 OSMO_ASSERT(ms->ul_tbf() == ul_tbf);
125 OSMO_ASSERT(ms->dl_tbf() == NULL);
126 OSMO_ASSERT(last_cb == IS_ACTIVE);
127
128 last_cb = UNKNOWN;
129
130 ms->attach_tbf(dl_tbf);
131 OSMO_ASSERT(!ms->is_idle());
132 OSMO_ASSERT(ms->ul_tbf() == ul_tbf);
133 OSMO_ASSERT(ms->dl_tbf() == dl_tbf);
134 OSMO_ASSERT(last_cb == UNKNOWN);
135
136 ms->detach_tbf(ul_tbf);
137 OSMO_ASSERT(!ms->is_idle());
138 OSMO_ASSERT(ms->ul_tbf() == NULL);
139 OSMO_ASSERT(ms->dl_tbf() == dl_tbf);
140 OSMO_ASSERT(last_cb == UNKNOWN);
141
142 ms->detach_tbf(dl_tbf);
143 OSMO_ASSERT(ms->is_idle());
144 OSMO_ASSERT(ms->ul_tbf() == NULL);
145 OSMO_ASSERT(ms->dl_tbf() == NULL);
146 OSMO_ASSERT(last_cb == IS_IDLE);
147
148 last_cb = UNKNOWN;
149 delete ms;
150
151 talloc_free(dl_tbf);
152 talloc_free(ul_tbf);
153
154 printf("=== end %s ===\n", __func__);
155}
156
157static void test_ms_replace_tbf()
158{
159 uint32_t tlli = 0xffeeddbb;
160 gprs_rlcmac_dl_tbf *dl_tbf[2];
161 gprs_rlcmac_ul_tbf *ul_tbf;
162 GprsMs *ms;
163 static bool was_idle;
164
165 struct MyCallback: public GprsMs::Callback {
166 virtual void ms_idle(class GprsMs *ms) {
167 OSMO_ASSERT(ms->is_idle());
168 printf(" ms_idle() was called\n");
169 was_idle = true;
170 }
171 virtual void ms_active(class GprsMs *ms) {
172 OSMO_ASSERT(!ms->is_idle());
173 printf(" ms_active() was called\n");
174 }
175 } cb;
176
177 printf("=== start %s ===\n", __func__);
178
Jacob Erlbeck17214bb2015-06-02 14:06:12 +0200179 ms = new GprsMs(NULL, tlli);
Jacob Erlbecke04e0b02015-05-06 18:30:48 +0200180 ms->set_callback(&cb);
181
182 OSMO_ASSERT(ms->is_idle());
183 was_idle = false;
184
185 dl_tbf[0] = talloc_zero(tall_pcu_ctx, struct gprs_rlcmac_dl_tbf);
186 dl_tbf[0]->direction = GPRS_RLCMAC_DL_TBF;
187 dl_tbf[1] = talloc_zero(tall_pcu_ctx, struct gprs_rlcmac_dl_tbf);
188 dl_tbf[1]->direction = GPRS_RLCMAC_DL_TBF;
189 ul_tbf = talloc_zero(tall_pcu_ctx, struct gprs_rlcmac_ul_tbf);
190 ul_tbf->direction = GPRS_RLCMAC_UL_TBF;
191
192 ms->attach_tbf(dl_tbf[0]);
193 OSMO_ASSERT(!ms->is_idle());
194 OSMO_ASSERT(ms->ul_tbf() == NULL);
195 OSMO_ASSERT(ms->dl_tbf() == dl_tbf[0]);
196 OSMO_ASSERT(!was_idle);
197
198 ms->attach_tbf(dl_tbf[1]);
199 OSMO_ASSERT(!ms->is_idle());
200 OSMO_ASSERT(ms->ul_tbf() == NULL);
201 OSMO_ASSERT(ms->dl_tbf() == dl_tbf[1]);
202 OSMO_ASSERT(!was_idle);
203
204 ms->attach_tbf(ul_tbf);
205 OSMO_ASSERT(!ms->is_idle());
206 OSMO_ASSERT(ms->ul_tbf() == ul_tbf);
207 OSMO_ASSERT(ms->dl_tbf() == dl_tbf[1]);
208 OSMO_ASSERT(!was_idle);
209
210 ms->detach_tbf(ul_tbf);
211 OSMO_ASSERT(!ms->is_idle());
212 OSMO_ASSERT(ms->ul_tbf() == NULL);
213 OSMO_ASSERT(ms->dl_tbf() == dl_tbf[1]);
214 OSMO_ASSERT(!was_idle);
215
216 ms->detach_tbf(dl_tbf[0]);
217 OSMO_ASSERT(!ms->is_idle());
218 OSMO_ASSERT(ms->ul_tbf() == NULL);
219 OSMO_ASSERT(ms->dl_tbf() == dl_tbf[1]);
220 OSMO_ASSERT(!was_idle);
221
222 ms->detach_tbf(dl_tbf[1]);
223 OSMO_ASSERT(ms->is_idle());
224 OSMO_ASSERT(ms->ul_tbf() == NULL);
225 OSMO_ASSERT(ms->dl_tbf() == NULL);
226 OSMO_ASSERT(was_idle);
227
228 delete ms;
229
230 talloc_free(dl_tbf[0]);
231 talloc_free(dl_tbf[1]);
232 talloc_free(ul_tbf);
233
234 printf("=== end %s ===\n", __func__);
235}
236
Jacob Erlbeck93990462015-05-15 15:50:43 +0200237static void test_ms_change_tlli()
238{
239 uint32_t start_tlli = 0xaa000000;
240 uint32_t new_ms_tlli = 0xff001111;
241 uint32_t other_sgsn_tlli = 0xff00eeee;
242 GprsMs *ms;
243
244 printf("=== start %s ===\n", __func__);
245
Jacob Erlbeck17214bb2015-06-02 14:06:12 +0200246 ms = new GprsMs(NULL, start_tlli);
Jacob Erlbeck93990462015-05-15 15:50:43 +0200247
248 OSMO_ASSERT(ms->is_idle());
249
250 /* MS announces TLLI, SGSN uses it immediately */
251 ms->set_tlli(new_ms_tlli);
252 OSMO_ASSERT(ms->tlli() == new_ms_tlli);
253 OSMO_ASSERT(ms->check_tlli(new_ms_tlli));
254 OSMO_ASSERT(ms->check_tlli(start_tlli));
255
256 ms->confirm_tlli(new_ms_tlli);
257 OSMO_ASSERT(ms->tlli() == new_ms_tlli);
258 OSMO_ASSERT(ms->check_tlli(new_ms_tlli));
259 OSMO_ASSERT(!ms->check_tlli(start_tlli));
260
261 /* MS announces TLLI, SGSN uses it later */
262 ms->set_tlli(start_tlli);
263 ms->confirm_tlli(start_tlli);
264
265 ms->set_tlli(new_ms_tlli);
266 OSMO_ASSERT(ms->tlli() == new_ms_tlli);
267 OSMO_ASSERT(ms->check_tlli(new_ms_tlli));
268 OSMO_ASSERT(ms->check_tlli(start_tlli));
269
270 ms->confirm_tlli(start_tlli);
271 OSMO_ASSERT(ms->tlli() == new_ms_tlli);
272 OSMO_ASSERT(ms->check_tlli(new_ms_tlli));
273 OSMO_ASSERT(ms->check_tlli(start_tlli));
274
275 ms->set_tlli(new_ms_tlli);
276 OSMO_ASSERT(ms->tlli() == new_ms_tlli);
277 OSMO_ASSERT(ms->check_tlli(new_ms_tlli));
278 OSMO_ASSERT(ms->check_tlli(start_tlli));
279
280 ms->confirm_tlli(new_ms_tlli);
281 OSMO_ASSERT(ms->tlli() == new_ms_tlli);
282 OSMO_ASSERT(ms->check_tlli(new_ms_tlli));
283 OSMO_ASSERT(!ms->check_tlli(start_tlli));
284
285 /* MS announces TLLI, SGSN uses it later after another new TLLI */
286 ms->set_tlli(start_tlli);
287 ms->confirm_tlli(start_tlli);
288
289 ms->set_tlli(new_ms_tlli);
290 OSMO_ASSERT(ms->tlli() == new_ms_tlli);
291 OSMO_ASSERT(ms->check_tlli(new_ms_tlli));
292 OSMO_ASSERT(ms->check_tlli(start_tlli));
293
294 ms->confirm_tlli(other_sgsn_tlli);
295 OSMO_ASSERT(ms->tlli() == new_ms_tlli);
296 OSMO_ASSERT(ms->check_tlli(new_ms_tlli));
297 OSMO_ASSERT(ms->check_tlli(other_sgsn_tlli));
298
299 ms->set_tlli(new_ms_tlli);
300 OSMO_ASSERT(ms->tlli() == new_ms_tlli);
301 OSMO_ASSERT(ms->check_tlli(new_ms_tlli));
302 OSMO_ASSERT(ms->check_tlli(other_sgsn_tlli));
303
304 ms->confirm_tlli(new_ms_tlli);
305 OSMO_ASSERT(ms->tlli() == new_ms_tlli);
306 OSMO_ASSERT(ms->check_tlli(new_ms_tlli));
307 OSMO_ASSERT(!ms->check_tlli(start_tlli));
308 OSMO_ASSERT(!ms->check_tlli(other_sgsn_tlli));
309
310 /* SGSN uses the new TLLI before it is announced by the MS (shouldn't
311 * happen in normal use) */
312 ms->set_tlli(start_tlli);
313 ms->confirm_tlli(start_tlli);
314
315 ms->confirm_tlli(new_ms_tlli);
316 OSMO_ASSERT(ms->tlli() == start_tlli);
317 OSMO_ASSERT(ms->check_tlli(new_ms_tlli));
318 OSMO_ASSERT(ms->check_tlli(start_tlli));
319
320 ms->set_tlli(new_ms_tlli);
321 OSMO_ASSERT(ms->tlli() == new_ms_tlli);
322 OSMO_ASSERT(ms->check_tlli(new_ms_tlli));
323 OSMO_ASSERT(!ms->check_tlli(start_tlli));
324
325 delete ms;
326
327 printf("=== end %s ===\n", __func__);
328}
329
Jacob Erlbeck53670862015-05-12 17:54:33 +0200330static void test_ms_storage()
331{
332 uint32_t tlli = 0xffeeddbb;
Jacob Erlbeck7b9f8252015-05-21 11:07:53 +0200333 const char *imsi1 = "001001987654321";
334 const char *imsi2 = "001001987654322";
335
Jacob Erlbeck53670862015-05-12 17:54:33 +0200336 gprs_rlcmac_ul_tbf *ul_tbf;
Jacob Erlbeck0e50ce62015-05-21 16:58:22 +0200337 GprsMs *ms, *ms_tmp;
Jacob Erlbeck17214bb2015-06-02 14:06:12 +0200338 GprsMsStorage store(NULL);
Jacob Erlbeck53670862015-05-12 17:54:33 +0200339
340 printf("=== start %s ===\n", __func__);
341
342 ul_tbf = talloc_zero(tall_pcu_ctx, struct gprs_rlcmac_ul_tbf);
343 ul_tbf->direction = GPRS_RLCMAC_UL_TBF;
344
345 ms = store.get_ms(tlli + 0);
346 OSMO_ASSERT(ms == NULL);
347
Jacob Erlbeck0e50ce62015-05-21 16:58:22 +0200348 ms = store.create_ms(tlli + 0, GPRS_RLCMAC_UL_TBF);
Jacob Erlbeck53670862015-05-12 17:54:33 +0200349 OSMO_ASSERT(ms != NULL);
350 OSMO_ASSERT(ms->tlli() == tlli + 0);
Jacob Erlbeck7b9f8252015-05-21 11:07:53 +0200351 ms->set_imsi(imsi1);
352 OSMO_ASSERT(strcmp(ms->imsi(), imsi1) == 0);
Jacob Erlbeck53670862015-05-12 17:54:33 +0200353
Jacob Erlbeck0e50ce62015-05-21 16:58:22 +0200354 ms_tmp = store.get_ms(tlli + 0);
355 OSMO_ASSERT(ms == ms_tmp);
356 OSMO_ASSERT(ms->tlli() == tlli + 0);
357
Jacob Erlbeck7b9f8252015-05-21 11:07:53 +0200358 ms_tmp = store.get_ms(0, 0, imsi1);
359 OSMO_ASSERT(ms == ms_tmp);
360 OSMO_ASSERT(strcmp(ms->imsi(), imsi1) == 0);
361 ms_tmp = store.get_ms(0, 0, imsi2);
362 OSMO_ASSERT(ms_tmp == NULL);
363
Jacob Erlbeck0e50ce62015-05-21 16:58:22 +0200364 ms = store.create_ms(tlli + 1, GPRS_RLCMAC_UL_TBF);
365 OSMO_ASSERT(ms != NULL);
Jacob Erlbeck53670862015-05-12 17:54:33 +0200366 OSMO_ASSERT(ms->tlli() == tlli + 1);
Jacob Erlbeck7b9f8252015-05-21 11:07:53 +0200367 ms->set_imsi(imsi2);
368 OSMO_ASSERT(strcmp(ms->imsi(), imsi2) == 0);
Jacob Erlbeck53670862015-05-12 17:54:33 +0200369
Jacob Erlbeck0e50ce62015-05-21 16:58:22 +0200370 ms_tmp = store.get_ms(tlli + 1);
371 OSMO_ASSERT(ms == ms_tmp);
Jacob Erlbeck53670862015-05-12 17:54:33 +0200372 OSMO_ASSERT(ms->tlli() == tlli + 1);
373
Jacob Erlbeck7b9f8252015-05-21 11:07:53 +0200374 ms_tmp = store.get_ms(0, 0, imsi1);
375 OSMO_ASSERT(ms_tmp != NULL);
376 OSMO_ASSERT(ms_tmp != ms);
377 ms_tmp = store.get_ms(0, 0, imsi2);
378 OSMO_ASSERT(ms == ms_tmp);
379 OSMO_ASSERT(strcmp(ms->imsi(), imsi2) == 0);
380
Jacob Erlbeck53670862015-05-12 17:54:33 +0200381 /* delete ms */
382 ms = store.get_ms(tlli + 0);
383 OSMO_ASSERT(ms != NULL);
384 ms->attach_tbf(ul_tbf);
385 ms->detach_tbf(ul_tbf);
386 ms = store.get_ms(tlli + 0);
387 OSMO_ASSERT(ms == NULL);
388 ms = store.get_ms(tlli + 1);
389 OSMO_ASSERT(ms != NULL);
390
391 /* delete ms */
392 ms = store.get_ms(tlli + 1);
393 OSMO_ASSERT(ms != NULL);
394 ms->attach_tbf(ul_tbf);
395 ms->detach_tbf(ul_tbf);
396 ms = store.get_ms(tlli + 1);
397 OSMO_ASSERT(ms == NULL);
398
399 talloc_free(ul_tbf);
400
401 printf("=== end %s ===\n", __func__);
402}
403
Jacob Erlbeckd9e10242015-05-28 15:43:53 +0200404static void test_ms_timeout()
405{
406 uint32_t tlli = 0xffeeddbb;
407 gprs_rlcmac_dl_tbf *dl_tbf;
408 gprs_rlcmac_ul_tbf *ul_tbf;
409 GprsMs *ms;
410 static enum {UNKNOWN, IS_IDLE, IS_ACTIVE} last_cb = UNKNOWN;
411
412 struct MyCallback: public GprsMs::Callback {
413 virtual void ms_idle(class GprsMs *ms) {
414 OSMO_ASSERT(ms->is_idle());
415 printf(" ms_idle() was called\n");
416 last_cb = IS_IDLE;
417 }
418 virtual void ms_active(class GprsMs *ms) {
419 OSMO_ASSERT(!ms->is_idle());
420 printf(" ms_active() was called\n");
421 last_cb = IS_ACTIVE;
422 }
423 } cb;
424
425 printf("=== start %s ===\n", __func__);
426
Jacob Erlbeck17214bb2015-06-02 14:06:12 +0200427 ms = new GprsMs(NULL, tlli);
Jacob Erlbeckd9e10242015-05-28 15:43:53 +0200428 ms->set_callback(&cb);
429 ms->set_timeout(1);
430
431 OSMO_ASSERT(ms->is_idle());
432
433 dl_tbf = talloc_zero(tall_pcu_ctx, struct gprs_rlcmac_dl_tbf);
434 dl_tbf->direction = GPRS_RLCMAC_DL_TBF;
435 ul_tbf = talloc_zero(tall_pcu_ctx, struct gprs_rlcmac_ul_tbf);
436 ul_tbf->direction = GPRS_RLCMAC_UL_TBF;
437
438 OSMO_ASSERT(last_cb == UNKNOWN);
439
440 ms->attach_tbf(ul_tbf);
441 OSMO_ASSERT(!ms->is_idle());
442 OSMO_ASSERT(last_cb == IS_ACTIVE);
443
444 last_cb = UNKNOWN;
445
446 ms->attach_tbf(dl_tbf);
447 OSMO_ASSERT(!ms->is_idle());
448 OSMO_ASSERT(last_cb == UNKNOWN);
449
450 ms->detach_tbf(ul_tbf);
451 OSMO_ASSERT(!ms->is_idle());
452 OSMO_ASSERT(last_cb == UNKNOWN);
453
454 ms->detach_tbf(dl_tbf);
455 OSMO_ASSERT(!ms->is_idle());
456 OSMO_ASSERT(last_cb == UNKNOWN);
457
458 usleep(1100000);
459 osmo_timers_update();
460
461 OSMO_ASSERT(ms->is_idle());
462 OSMO_ASSERT(last_cb == IS_IDLE);
463
464 last_cb = UNKNOWN;
465 delete ms;
466 talloc_free(dl_tbf);
467 talloc_free(ul_tbf);
468
469 printf("=== end %s ===\n", __func__);
470}
471
Jacob Erlbeck70b96aa2015-06-12 10:52:34 +0200472static void test_ms_cs_selection()
473{
474 BTS the_bts;
475 gprs_rlcmac_bts *bts = the_bts.bts_data();
476 uint32_t tlli = 0xffeeddbb;
477
478 gprs_rlcmac_dl_tbf *dl_tbf;
479 GprsMs *ms;
480
481 printf("=== start %s ===\n", __func__);
482
483 bts->initial_cs_dl = 4;
484 bts->initial_cs_ul = 1;
485 bts->cs_downgrade_threshold = 0;
486
487 ms = new GprsMs(&the_bts, tlli);
488
489 OSMO_ASSERT(ms->is_idle());
490
491 dl_tbf = talloc_zero(tall_pcu_ctx, struct gprs_rlcmac_dl_tbf);
492 dl_tbf->direction = GPRS_RLCMAC_DL_TBF;
493
494 dl_tbf->set_ms(ms);
495 OSMO_ASSERT(!ms->is_idle());
496
497 OSMO_ASSERT(ms->current_cs_dl() == 4);
498
499 bts->cs_downgrade_threshold = 200;
500
501 OSMO_ASSERT(ms->current_cs_dl() == 3);
502
503 talloc_free(dl_tbf);
504
505 printf("=== end %s ===\n", __func__);
506}
507
Jacob Erlbecke04e0b02015-05-06 18:30:48 +0200508static const struct log_info_cat default_categories[] = {
509 {"DPCU", "", "GPRS Packet Control Unit (PCU)", LOGL_INFO, 1},
510};
511
512static int filter_fn(const struct log_context *ctx,
513 struct log_target *tar)
514{
515 return 1;
516}
517
518const struct log_info debug_log_info = {
519 filter_fn,
520 (struct log_info_cat*)default_categories,
521 ARRAY_SIZE(default_categories),
522};
523
524int main(int argc, char **argv)
525{
526 struct vty_app_info pcu_vty_info = {0};
527
528 tall_pcu_ctx = talloc_named_const(NULL, 1, "MsTest context");
529 if (!tall_pcu_ctx)
530 abort();
531
532 msgb_set_talloc_ctx(tall_pcu_ctx);
533 osmo_init_logging(&debug_log_info);
534 log_set_use_color(osmo_stderr_target, 0);
535 log_set_print_filename(osmo_stderr_target, 0);
536 log_set_log_level(osmo_stderr_target, LOGL_INFO);
537
538 vty_init(&pcu_vty_info);
539 pcu_vty_init(&debug_log_info);
540
541 test_ms_state();
542 test_ms_callback();
543 test_ms_replace_tbf();
Jacob Erlbeck93990462015-05-15 15:50:43 +0200544 test_ms_change_tlli();
Jacob Erlbeck53670862015-05-12 17:54:33 +0200545 test_ms_storage();
Jacob Erlbeckd9e10242015-05-28 15:43:53 +0200546 test_ms_timeout();
Jacob Erlbeck70b96aa2015-06-12 10:52:34 +0200547 test_ms_cs_selection();
Jacob Erlbecke04e0b02015-05-06 18:30:48 +0200548
549 if (getenv("TALLOC_REPORT_FULL"))
550 talloc_report_full(tall_pcu_ctx, stderr);
551
552 return EXIT_SUCCESS;
553}
554
555extern "C" {
556void l1if_pdch_req() { abort(); }
557void l1if_connect_pdch() { abort(); }
558void l1if_close_pdch() { abort(); }
559void l1if_open_pdch() { abort(); }
560}