aboutsummaryrefslogtreecommitdiffstats
path: root/library/BSSLAP_Types.ttcn
blob: 742d1f550a32659200570d787e6d35250e7a1907 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
module BSSLAP_Types {

/* BSSLAP_Types, defining abstract TTCN-3 data types for the 3GPP BSSLAP protocol.
 *
 * BSSLAP is a 3GPP standard protocol used between BSC and SMLC in a GSM network.
 * This file covers 3GPP TS 48.071 version 15.0.0 Release 15
 *
 * (C) 2020 by Harald Welte <laforge@gnumonks.org>
 * All rights reserved.
 *
 * Released under the terms of GNU General Public License, Version 2 or
 * (at your option) any later version.
 *
 * SPDX-License-Identifier: GPL-2.0-or-later
 */

import from General_Types all;
import from Osmocom_Types all;


/* 3GPP TS 48.071 Table 5.1 */
type enumerated BSSLAP_IEI {
	BSSLAP_IEI_TA			('00000001'B),
	BSSLAP_IEI_CELL_ID		('00001001'B),
	BSSLAP_IEI_CHAN_DESC		('00010000'B),
	BSSLAP_IEI_MEAS_REP		('00010100'B),
	BSSLAP_IEI_CAUSE		('00011000'B),
	BSSLAP_IEI_RRLP_FLAG		('00011001'B),
	BSSLAP_IEI_RRLP			('00011011'B),
	BSSLAP_IEI_CELL_ID_LIST		('00011100'B),
	BSSLAP_IEI_ENH_MEAS_REP		('00011101'B),
	BSSLAP_IEI_LAC			('00011110'B),
	BSSLAP_IEI_FREQ_LIST		('00100001'B),
	BSSLAP_IEI_MS_POWER		('00100010'B),
	BSSLAP_IEI_DELTA_TIMER		('00100011'B),
	BSSLAP_IEI_SERVING_CELL_ID	('00100100'B),
	BSSLAP_IEI_ENCR_KEY		('00100101'B),
	BSSLAP_IEI_CIPH_MODE_SET	('00100110'B),
	BSSLAP_IEI_CHAN_MODE		('00100111'B),
	BSSLAP_IEI_MR_CONFIG		('00101000'B),
	BSSLAP_IEI_POLLING_REPETITION	('00101001'B),
	BSSLAP_IEI_PACKET_CHAN_DESC	('00101010'B),
	BSSLAP_IEI_TLLI			('00101011'B),
	BSSLAP_IEI_TFI			('00101100'B),
	BSSLAP_IEI_TBF_START_TIME	('00101101'B),
	BSSLAP_IEI_PWRUP_START_TIME	('00101110'B),
	BSSLAP_IEI_LONG_ENCR_KEY	('00101111'B),
	BSSLAP_IEI_CONCUR_POS_PROC_F	('00110000'B)
} with { variant "FIELDLENGTH(8)" };

/* 3GPP TS 48.071 Section 5.1 */
type enumerated BSSLAP_MsgType {
	BSSLAP_MSGT_TA_REQUEST		('00000001'B),
	BSSLAP_MSGT_TA_RESPONSE		('00000010'B),
	BSSLAP_MSGT_REJECT		('00001010'B),
	BSSLAP_MSGT_RESET		('00001011'B),
	BSSLAP_MSGT_ABORT		('00001100'B),
	BSSLAP_MSGT_TA_LAYER3		('00001101'B),
	BSSLAP_MSGT_MS_POS_CMD		('00001111'B),
	BSSLAP_MSGT_MS_POS_RESP		('00010000'B),
	BSSLAP_MSGT_UTDOA_REQ		('00010001'B),
	BSSLAP_MSGT_UTDOA_RESP		('00010010'B)
} with { variant "FIELDLENGTH(8)" };


/* Section 4.2.1 */
type record BSSLAP_TaRequest {
	BSSLAP_MsgType			msg_type
};

/* Section 4.2.2 */
type record BSSLAP_TaResponse {
	BSSLAP_MsgType			msg_type,
	BSSLAP_IE_CellId		serving_cell_id,
	BSSLAP_IE_TimingAdvance		timing_advance,
	BSSLAP_IE_MeasRep		meas_rep optional,
	BSSLAP_IE_EnhMeasRep		enh_meas_rep optional,
	BSSLAP_IE_CellIdList		meas_cell_id_list optional,
	BSSLAP_IE_ConcurMethodF		concur_meth_flag optional
};

/* Section 4.2.5 */
type record BSSLAP_Reject {
	BSSLAP_MsgType			msg_type,
	BSSLAP_IE_Cause			cause
};

/* Section 4.2.6 */
type record BSSLAP_Reset {
	BSSLAP_MsgType			msg_type,
	BSSLAP_IE_CellId		cell_id,
	BSSLAP_IE_TimingAdvance		timing_advance,
	BSSLAP_IE_ChanDesc		chan_desc,
	BSSLAP_IE_Cause			cause,
	BSSLAP_IE_MeasRep		meas_rep optional,
	BSSLAP_IE_EnhMeasRep		enh_meas_rep optional,
	BSSLAP_IE_CellIdList		meas_cell_id_list optional,
	BSSLAP_IE_LAC			lac optional,
	BSSLAP_IE_FreqList		freq_list optional,
	BSSLAP_IE_ChanMode		chan_mode optional,
	BSSLAP_IE_MultiRateConfig	mr_config optional,
	BSSLAP_IE_PacketChanDesc	pkt_chan_desc optional,
	BSSLAP_IE_TLLI			tlli optional,
	BSSLAP_IE_TFI			tfi optional,
	BSSLAP_IE_StartingTime		tbf_start_time optional,
	BSSLAP_IE_EncryptionKey		encr_key optional,
	BSSLAP_IE_CiphModeSet		ciph_mode_set optional,
	BSSLAP_IE_LongEncryptionKey	long_encr_key optional
};

/* Section 4.2.7 */
type record BSSLAP_Abort {
	BSSLAP_MsgType			msg_type,
	BSSLAP_IE_Cause			cause
};

/* Section 4.2.8 */
type record BSSLAP_TA_Layer3 {
	BSSLAP_MsgType			msg_type,
	BSSLAP_IE_TimingAdvance		timing_advance,
	BSSLAP_IE_MeasRep		meas_rep optional,
	BSSLAP_IE_EnhMeasRep		enh_meas_rep optional,
	BSSLAP_IE_CellIdList		meas_cell_id_list optional
};

/* Section 4.2.9 */
type record BSSLAP_MS_PosCmd {
	BSSLAP_MsgType			msg_type,
	BSSLAP_IE_RrlpFlag		flag,
	BSSLAP_IE_Rrlp			rrlp_info
};

/* Section 4.2.10 */
type record BSSLAP_MS_PosResp {
	BSSLAP_MsgType			msg_type,
	BSSLAP_IE_RrlpFlag		flag,
	BSSLAP_IE_Rrlp			rrlp_info,
	BSSLAP_IE_TimingAdvance		timing_advance optional,
	BSSLAP_IE_MeasRep		meas_rep optional,
	BSSLAP_IE_EnhMeasRep		enh_meas_rep optional,
	BSSLAP_IE_CellIdList		meas_cell_id_list optional,
	BSSLAP_IE_ConcurMethodF		concur_meth_flag optional
};

/* Section 4.2.11 */
type record BSSLAP_UTDOA_Req {
	BSSLAP_MsgType			msg_type,
	BSSLAP_IE_DeltaTimer		delta_timer optional,
	BSSLAP_IE_PollingRep		polling_repetition optional
};

type union BSSLAP_PDU {
	BSSLAP_TaRequest	ta_req,
	BSSLAP_TaResponse	ta_resp,
	BSSLAP_Reject		reject,
	BSSLAP_Reset		reset,
	BSSLAP_Abort		abort,
	BSSLAP_TA_Layer3	ta_layer3,
	BSSLAP_MS_PosCmd	ms_pos_cmd,
	BSSLAP_MS_PosResp	ms_pos_resp,
	BSSLAP_UTDOA_Req	utdoa_req
	// TODO: U-TDOA Resp
} with { variant "TAG(
		ta_req,		msg_type = BSSLAP_MSGT_TA_REQUEST;
		ta_resp,	msg_type = BSSLAP_MSGT_TA_RESPONSE;
		reject,		msg_type = BSSLAP_MSGT_REJECT;
		reset,		msg_type = BSSLAP_MSGT_RESET;
		abort,		msg_type = BSSLAP_MSGT_ABORT;
		ta_layer3,	msg_type = BSSLAP_MSGT_TA_LAYER3;
		ms_pos_cmd,	msg_type = BSSLAP_MSGT_MS_POS_CMD;
		ms_pos_resp,	msg_type = BSSLAP_MSGT_MS_POS_RESP;
		utdoa_req,	msg_type = BSSLAP_MSGT_UTDOA_REQ;
		)"
};


/* Section 5.2 */
type record BSSLAP_IE_TimingAdvance {
	BSSLAP_IEI		iei,
	uint8_t			ta
} with { variant "PRESENCE(iei = BSSLAP_IEI_TA)" };


/* Section 5.4 */
type record BSSLAP_IE_CellId {
	BSSLAP_IEI		iei,
	uint16_t		cell_id
} with { variant "PRESENCE(iei = BSSLAP_IEI_CELL_ID)" };

/* Section 5.8 */
type record BSSLAP_IE_ChanDesc {
	BSSLAP_IEI		iei,
	OCT3			chan_desc
} with { variant "PRESENCE(iei = BSSLAP_IEI_CHAN_DESC)" };


/* Section 5.12 */
type record BSSLAP_IE_MeasRep {
	BSSLAP_IEI		iei,
	uint8_t			len,
	octetstring		meas_rep
} with {
	variant "PRESENCE(iei = BSSLAP_IEI_MEAS_REP)"
	variant (len) "LENGTHTO(meas_rep)"
};

/* Section 5.14 */
type record BSSLAP_IE_Cause {
	BSSLAP_IEI		iei,
	BSSLAP_Cause		cause
} with { variant "PRESENCE(iei = BSSLAP_IEI_CAUSE)" };
type enumerated BSSLAP_Cause {
	BSSLAP_CAUSE_CONGESTION			('00000000'B),
	BSSLAP_CAUSE_CHAN_MODE_NOT_SUPP		('00000001'B),
	BSSLAP_CAUSE_POS_PROC_NOT_SUPP		('00000010'B),
	BSSLAP_CAUSE_OTHER_RADIO_EVT_FAIL	('00000011'B),
	BSSLAP_CAUSE_INTRA_BSS_HO		('00000100'B),
	BSSLAP_CAUSE_SUPERV_TIMER_EXPIRED	('00000101'B),
	BSSLAP_CAUSE_INTER_BSS_HO		('00000110'B),
	BSSLAP_CAUSE_LOSS_SIG_CONN_MS		('00000111'B),
	BSSLAP_CAUSE_INCORR_SERV_CELL_ID	('00001000'B),
	BSSLAP_CAUSE_BSSAP_LE_SEGMENT_ERR	('00001001'B),
	BSSLAP_CAUSE_CONCUR_POS_PROC_NOT_EN	('00001010'B)
};

/* Section 5.15 */
type record BSSLAP_IE_RrlpFlag {
	BSSLAP_IEI		iei,
	BIT7			spare,
	boolean			not_a_pos_cmd
} with { variant "PRESENCE(iei = BSSLAP_IEI_RRLP_FLAG)" };

/* Section 5.16 */
type record BSSLAP_IE_Rrlp {
	BSSLAP_IEI		iei,
	uint16_t		len,
	octetstring		rrlp_apdu
} with {
	variant "PRESENCE(iei = BSSLAP_IEI_RRLP)"
	variant (len) "LENGTHTO(rrlp_apdu)"
};

/* Section 5.17 */
type record BSSLAP_IE_CellIdList {
	BSSLAP_IEI		iei,
	uint8_t			len,
	BSSLAP_CellIdList	cell_id_list
} with {
	variant "PRESENCE(iei = BSSLAP_IEI_CELL_ID_LIST)"
	variant (len) "LENGTHTO(cell_id_list)"
};
type record of BSSLAP_CellIdListEnt BSSLAP_CellIdList;
type union BSSLAP_CellIdListEnt {
	BIT4			spare,
	BSSLAP_CellIdDiscr	discr,
	BSSLAP_CellIdListEntU	u
}// with {
//};
type enumerated BSSLAP_CellIdDiscr {
	BSSLAP_CIDL_DISC_CGI	('0000'B),
	BSSLAP_CIDL_DISC_LAC_CI	('0001'B),
	BSSLAP_CIDL_DISC_3G_1	('0010'B),
	BSSLAP_CIDL_DISC_3G_2	('0011'B)
} with { variant "FIELDLENGTH(4)" };
type union BSSLAP_CellIdListEntU {
	BSSLAP_CellIdListEntCGI		cgi,
	BSSLAP_CellIdListEntLACCI	lac_ci,
	BSSLAP_CellIdListEnt3G1		umts_cont1,
	BSSLAP_CellIdListEnt3G2		umts_cont2
};
type record BSSLAP_CellIdListEntCGI {
	HEX6n		mcc_mnc,
	uint16_t	lac,
	uint16_t	ci
};
type record BSSLAP_CellIdListEntLACCI {
	uint16_t	lac,
	uint16_t	ci
};
type record BSSLAP_CellIdListEnt3G1 {
	OCT9		cont
};
type record BSSLAP_CellIdListEnt3G2 {
	OCT6		cont
};

/* Section 5.18 */
type record BSSLAP_IE_EnhMeasRep {
	BSSLAP_IEI		iei,
	uint8_t			len,
	octetstring		meas_rep
} with {
	variant "PRESENCE(iei = BSSLAP_IEI_ENH_MEAS_REP)"
	variant (len) "LENGTHTO(meas_rep)"
};

/* Section 5.19 */
type record BSSLAP_IE_LAC {
	BSSLAP_IEI		iei,
	uint16_t		lac
} with { variant "PRESENCE(iei = BSSLAP_IEI_LAC)" };

/* Section 5.20 */
type record BSSLAP_IE_FreqList {
	BSSLAP_IEI		iei,
	uint8_t			len,
	octetstring		freq_list
} with {
	variant "PRESENCE(iei = BSSLAP_IEI_FREQ_LIST)"
	variant (len) "LENGTHTO(freq_list)"
};

/* Section 5.21 */
type record BSSLAP_IE_MsPower {
	BSSLAP_IEI		iei,
	uint8_t			ms_pwr
} with { variant "PRESENCE(iei = BSSLAP_IEI_MS_POWER)" };

/* Section 5.22 */
type record BSSLAP_IE_DeltaTimer {
	BSSLAP_IEI		iei,
	uint8_t			timer_val
} with { variant "PRESENCE(iei = BSSLAP_IEI_MS_POWER)" };

/* Section 5.23 */
type record BSSLAP_IE_ServingCellId {
	BSSLAP_IEI		iei,
	uint8_t			len,
	octetstring		val	// FIXME: like TS 08.08
} with {
	variant "PRESENCE(iei = BSSLAP_IEI_SERVING_CELL_ID)"
	variant (len) "LENGTHTO(val)"
};

/* Section 5.24 */
type record BSSLAP_IE_EncryptionKey {
	BSSLAP_IEI		iei,
	OCT8			kc
} with { variant "PRESENCE(iei = BSSLAP_IEI_ENCR_KEY)" };

/* Section 5.25 */
type record BSSLAP_IE_CiphModeSet {
	BSSLAP_IEI		iei,
	BIT1			spare,
	BIT3			iei2,
	BIT3			algo_id,
	boolean			sc
} with { variant "PRESENCE(iei = BSSLAP_IEI_CIPH_MODE_SET)" };

/* Section 5.26 */
type record BSSLAP_IE_ChanMode {
	BSSLAP_IEI		iei,
	OCT1			mode
} with { variant "PRESENCE(iei = BSSLAP_IEI_CHAN_MODE)" };

/* Section 5.27 */
type record BSSLAP_IE_MultiRateConfig {
	BSSLAP_IEI		iei,
	uint8_t			len,
	/* TODO: Unify with TS 48.018 */
	uint3_t			mr_speech_ver,
	boolean			nscb,
	boolean			icmi,
	BIT1			spare,
	uint2_t			start_mode,
	octetstring		parameters
} with {
	variant "PRESENCE(iei = BSSLAP_IEI_MR_CONFIG)"
	variant (len) "LENGTHTO(mr_speech_ver,nscb,icmi,spare,start_mode,parameters)"
};

/* Section 5.28 */
type record BSSLAP_IE_PollingRep {
	BSSLAP_IEI		iei,
	BIT2			spare,
	uint6_t			num_rep
} with { variant "PRESENCE(iei = BSSLAP_IEI_MR_CONFIG)" };

/* Section 5.29 */
type record BSSLAP_IE_PacketChanDesc {
	BSSLAP_IEI		iei,
	OCT4			chan_desc
} with { variant "PRESENCE(iei = BSSLAP_IEI_PACKET_CHAN_DESC)" };

/* Section 5.30 */
type record BSSLAP_IE_TLLI {
	BSSLAP_IEI		iei,
	OCT4			tlli
} with { variant "PRESENCE(iei = BSSLAP_IEI_TLLI)" };

/* Section 5.31 */
type record BSSLAP_IE_TFI {
	BSSLAP_IEI		iei,
	BIT3			spare,
	uint5_t			tfi
} with { variant "PRESENCE(iei = BSSLAP_IEI_TFI)" };

/* Section 5.32 */
type record BSSLAP_IE_StartingTime {
	BSSLAP_IEI		iei,
	uint5_t			t1_p,
	uint6_t			t3,
	uint6_t			t2
} with { variant "PRESENCE(iei = BSSLAP_IEI_TBF_START_TIME)" };

/* Section 5.33 */
type record BSSLAP_IE_LongEncryptionKey {
	BSSLAP_IEI		iei,
	OCT16			kc
} with { variant "PRESENCE(iei = BSSLAP_IEI_LONG_ENCR_KEY)" };

/* Section 5.34 */
type record BSSLAP_IE_ConcurMethodF {
	BSSLAP_IEI		iei,
	BSSLAP_ConcurMethodF	flag
} with { variant "PRESENCE(iei = BSSLAP_IEI_CONCUR_POS_PROC_F)" };
type enumerated BSSLAP_ConcurMethodF {
	BSSLAP_SECOND_CONCUR_ALLOWED	('00000000'B),
	BSSLAP_SECOND_CONCUR_DISALLOWED	('11111111'B)
} with { variant "FIELDLENGTH(8)" };



external function enc_BSSLAP_PDU(in BSSLAP_PDU msg) return octetstring
	with { extension "prototype(convert) encode(RAW)" };
external function dec_BSSLAP_PDU(in octetstring stream) return BSSLAP_PDU
	with { extension "prototype(convert) decode(RAW)" };

template (value) BSSLAP_PDU ts_BSSLAP_TA_Req := {
	ta_req := {
		msg_type := BSSLAP_MSGT_TA_REQUEST
	}
}
template (present) BSSLAP_PDU tr_BSSLAP_TA_Req := {
	ta_req := {
		msg_type := BSSLAP_MSGT_TA_REQUEST
	}
}

template (value) BSSLAP_PDU
ts_BSSLAP_TA_Resp(uint16_t cell_id, uint8_t ta)  := {
	ta_resp := {
		msg_type := BSSLAP_MSGT_TA_RESPONSE,
		serving_cell_id := ts_BSSLAP_IE_CellId(cell_id),
		timing_advance := ts_BSSLAP_IE_TA(ta),
		meas_rep := omit,
		enh_meas_rep := omit,
		meas_cell_id_list := omit,
		concur_meth_flag := omit
 	}
}
template (present) BSSLAP_PDU
tr_BSSLAP_TA_Resp(template (present) uint16_t cell_id, template (present) uint8_t ta)  := {
	ta_resp := {
		msg_type := BSSLAP_MSGT_TA_RESPONSE,
		serving_cell_id := tr_BSSLAP_IE_CellId(cell_id),
		timing_advance := tr_BSSLAP_IE_TA(ta),
		meas_rep := *,
		enh_meas_rep := *,
		meas_cell_id_list := *,
		concur_meth_flag := *
 	}
}

template (value) BSSLAP_PDU
ts_BSSLAP_Reject(BSSLAP_Cause cause) := {
	reject := {
		msg_type := BSSLAP_MSGT_REJECT,
		cause := ts_BSSLAP_IE_Cause(cause)
	}
}
template (present) BSSLAP_PDU
tr_BSSLAP_Reject(template (present) BSSLAP_Cause cause) := {
	reject := {
		msg_type := BSSLAP_MSGT_REJECT,
		cause := tr_BSSLAP_IE_Cause(cause)
	}
}


template (value) BSSLAP_PDU
ts_BSSLAP_Abort(BSSLAP_Cause cause) := {
	abort := {
		msg_type := BSSLAP_MSGT_ABORT,
		cause := ts_BSSLAP_IE_Cause(cause)
	}
}
template (present) BSSLAP_PDU
tr_BSSLAP_Abort(template (present) BSSLAP_Cause cause) := {
	abort := {
		msg_type := BSSLAP_MSGT_ABORT,
		cause := tr_BSSLAP_IE_Cause(cause)
	}
}

template (value) BSSLAP_PDU ts_BSSLAP_TA_Layer3(uint8_t ta) := {
	ta_layer3 := {
		msg_type := BSSLAP_MSGT_TA_LAYER3,
		timing_advance := ts_BSSLAP_IE_TA(ta),
		meas_rep := omit,
		enh_meas_rep := omit,
		meas_cell_id_list := omit
	}
}

template (present) BSSLAP_PDU tr_BSSLAP_TA_Layer3(template BSSLAP_IE_TimingAdvance timing_advance := *) := {
	ta_layer3 := {
		msg_type := BSSLAP_MSGT_TA_LAYER3,
		timing_advance := timing_advance,
		meas_rep := *,
		enh_meas_rep := *,
		meas_cell_id_list := *
	}
}

template (value) BSSLAP_IE_ChanDesc ts_BSSLAP_IE_ChanDesc := {
	iei := BSSLAP_IEI_CHAN_DESC,
	chan_desc := '112233'O /* FIXME */
}

template (value) BSSLAP_PDU
ts_BSSLAP_Reset(uint16_t cell_id,
		uint8_t ta,
		BSSLAP_IE_ChanDesc chan_desc,
		BSSLAP_Cause cause) := {
	reset := {
		msg_type := BSSLAP_MSGT_RESET,
		cell_id := ts_BSSLAP_IE_CellId(cell_id),
		timing_advance := ts_BSSLAP_IE_TA(ta),
		chan_desc := chan_desc,
		cause := tr_BSSLAP_IE_Cause(cause),
		meas_rep := omit,
		enh_meas_rep := omit,
		meas_cell_id_list := omit,
		lac := omit,
		freq_list := omit,
		chan_mode := omit,
		mr_config := omit,
		pkt_chan_desc := omit,
		tlli := omit,
		tfi := omit,
		tbf_start_time := omit,
		encr_key := omit,
		ciph_mode_set := omit,
		long_encr_key := omit
	}
}

template (present) BSSLAP_PDU
tr_BSSLAP_Reset(template (present) BSSLAP_Cause cause) := {
	reset := {
		msg_type := BSSLAP_MSGT_RESET,
		cell_id := ?,
		timing_advance := ?,
		chan_desc := ?,
		cause := tr_BSSLAP_IE_Cause(cause),
		meas_rep := *,
		enh_meas_rep := *,
		meas_cell_id_list := *,
		lac := *,
		freq_list := *,
		chan_mode := *,
		mr_config := *,
		pkt_chan_desc := *,
		tlli := *,
		tfi := *,
		tbf_start_time := *,
		encr_key := *,
		ciph_mode_set := *,
		long_encr_key := *
	}
}

template (value) BSSLAP_IE_TimingAdvance ts_BSSLAP_IE_TA(uint8_t ta) := {
	iei := BSSLAP_IEI_TA,
	ta := ta
}
template (present) BSSLAP_IE_TimingAdvance tr_BSSLAP_IE_TA(template (present) uint8_t ta) := {
	iei := BSSLAP_IEI_TA,
	ta := ta
}

template (value) BSSLAP_IE_CellId ts_BSSLAP_IE_CellId(uint16_t cell_id) := {
	iei := BSSLAP_IEI_CELL_ID,
	cell_id := cell_id
}
template (present) BSSLAP_IE_CellId tr_BSSLAP_IE_CellId(template (present) uint16_t cell_id) := {
	iei := BSSLAP_IEI_CELL_ID,
	cell_id := cell_id
}

template (value) BSSLAP_IE_Cause ts_BSSLAP_IE_Cause(BSSLAP_Cause cause) := {
	iei := BSSLAP_IEI_CAUSE,
	cause := cause
}
template (present) BSSLAP_IE_Cause tr_BSSLAP_IE_Cause(template (present) BSSLAP_Cause cause) := {
	iei := BSSLAP_IEI_CAUSE,
	cause := cause
}






} with { encode "RAW" };