blob: b506865be1297ee5a94f5817c72d7330f46b2c0e [file] [log] [blame]
Harald Weltec76f29f2017-11-22 12:46:46 +01001module L3_Templates {
2
Harald Welte35bb7162018-01-03 21:07:52 +01003/* L3 Templates, building on top of MobileL3*_Types from Ericsson.
4 *
5 * (C) 2017 by Harald Welte <laforge@gnumonks.org>
6 * All rights reserved.
7 *
8 * Released under the terms of GNU General Public License, Version 2 or
9 * (at your option) any later version.
10 */
11
Harald Weltec76f29f2017-11-22 12:46:46 +010012import from General_Types all;
13import from MobileL3_Types all;
14import from MobileL3_CommonIE_Types all;
15import from MobileL3_MM_Types all;
16import from MobileL3_RRM_Types all;
Harald Weltecb6cc332018-01-21 13:59:08 +010017import from MobileL3_CC_Types all;
18//import from MobileL3_GMM_SM_Types all;
19//import from MobileL3_SMS_Types all;
20
Harald Weltec76f29f2017-11-22 12:46:46 +010021
22type enumerated CmServiceType {
23 CM_TYPE_MO_CALL ('0001'B),
24 CM_TYPE_EMERG_CALL ('0010'B),
25 CM_TYPE_MO_SMS ('0100'B),
Harald Welte6ed6bf92018-01-24 21:09:15 +010026 CM_TYPE_SS_ACT ('1000'B),
27 CM_TYPE_VGCS ('1001'B),
28 CM_TYPE_VBS ('1010'B),
29 CM_TYPE_LCS ('1011'B)
Harald Weltec76f29f2017-11-22 12:46:46 +010030}
31
Harald Welte33ec09b2018-02-10 15:34:46 +010032template ML3_Cause_TLV ts_ML3_Cause(BIT7 cause, BIT4 loc := '0001'B, BIT2 std := '11'B) := {
33 elementIdentifier := '08'O,
34 lengthIndicator := 0, /* overwritten */
35 oct3 := {
36 location := loc,
37 spare1_1 := '0'B,
38 codingStandard := std,
39 ext1 := '0'B,
40 recommendation := omit,
41 ext2 := omit
42 },
43 oct4 := {
44 causeValue := cause,
45 ext3 := '1'B
46 },
47 diagnostics := omit
48}
49
Harald Weltec76f29f2017-11-22 12:46:46 +010050
51/* send template fro Mobile Identity (TMSI) */
52template MobileIdentityLV ts_MI_TMSI_LV(OCT4 tmsi) := {
53 lengthIndicator := 0, /* overwritten */
54 mobileIdentityV := {
55 typeOfIdentity := '000'B, /* overwritten */
56 oddEvenInd_identity := {
57 tmsi_ptmsi := {
58 oddevenIndicator := '0'B,
59 fillerDigit := '1111'B,
60 octets := tmsi
61 }
62 }
63 }
64}
65
66private function f_enc_IMSI_L3(hexstring digits) return IMSI_L3 {
67 var IMSI_L3 l3;
68 var integer len := lengthof(digits);
69 if (len rem 2 == 1) { /* modulo remainder */
Harald Welte365f4ed2017-11-23 00:00:43 +010070 l3.oddevenIndicator := '1'B;
Harald Welteae136252018-01-24 20:53:21 +010071 l3.fillerDigit := omit;
Harald Weltec76f29f2017-11-22 12:46:46 +010072 } else {
Harald Welte365f4ed2017-11-23 00:00:43 +010073 l3.oddevenIndicator := '0'B;
Harald Welteae136252018-01-24 20:53:21 +010074 l3.fillerDigit := '1111'B;
Harald Weltec76f29f2017-11-22 12:46:46 +010075 }
76 l3.digits := digits;
77 return l3;
78}
79
Harald Welteba7b6d92018-01-23 21:32:34 +010080private function f_enc_IMEI_L3(hexstring digits) return IMEI_L3 {
81 var IMEI_L3 l3;
82 var integer len := lengthof(digits);
83 if (len rem 2 == 1) { /* modulo remainder */
84 l3.oddevenIndicator := '1'B;
85 } else {
86 l3.oddevenIndicator := '0'B;
87 }
88 l3.digits := digits;
89 return l3;
90}
91
Harald Weltec76f29f2017-11-22 12:46:46 +010092/* send template fro Mobile Identity (IMSI) */
93template (value) MobileIdentityLV ts_MI_IMSI_LV(hexstring imsi_digits) := {
94 lengthIndicator := 0, /* overwritten */
95 mobileIdentityV := {
96 typeOfIdentity := '000'B, /* overwritten */
97 oddEvenInd_identity := {
98 imsi := f_enc_IMSI_L3(imsi_digits)
99 }
100 }
101}
102
Harald Welteba7b6d92018-01-23 21:32:34 +0100103/* send template fro Mobile Identity (IMEI) */
104template (value) MobileIdentityLV ts_MI_IMEI_LV(hexstring imei_digits) := {
105 lengthIndicator := 0, /* overwritten */
106 mobileIdentityV := {
107 typeOfIdentity := '000'B, /* overwritten */
108 oddEvenInd_identity := {
109 imei := f_enc_IMEI_L3(imei_digits)
110 }
111 }
112}
113
114
Harald Weltec76f29f2017-11-22 12:46:46 +0100115/* Send template for Classmark 2 */
116template (value) MobileStationClassmark2_LV ts_CM2 := {
117 lengthIndicator := 0,
118 rf_PowerCapability := '000'B,
119 a5_1 := '0'B,
120 esind := '1'B,
121 revisionLevel := '10'B,
122 spare1_1 := '0'B,
Harald Welte898113b2018-01-31 18:32:21 +0100123 mobileStationClassmark2_oct4 := {
124 fc := '1'B,
125 vgcs := '0'B,
126 vbs := '0'B,
127 sm_Capability := '1'B,
128 ss_ScreenIndicator := '01'B,
129 ps_Capability := '1'B,
130 spare2_1 := '0'B
131 },
132 mobileStationClassmark2_oct5 := {
133 a5_2 := '0'B,
134 a5_3 := '1'B,
135 cmsp := '0'B,
136 solsa := '0'B,
137 ucs2 := '0'B,
138 lcsva_cap := '0'B,
139 spare5_7 :='0'B,
140 cm3 := '0'B
141 }
Harald Weltec76f29f2017-11-22 12:46:46 +0100142};
143
144/* Send template for CM SERVICE REQUEST */
Harald Welte6ed6bf92018-01-24 21:09:15 +0100145template (value) PDU_ML3_MS_NW ts_CM_SERV_REQ(CmServiceType serv_type, MobileIdentityLV mi_lv) := {
Harald Weltec76f29f2017-11-22 12:46:46 +0100146 discriminator := '0000'B, /* overwritten */
147 tiOrSkip := {
148 skipIndicator := '0000'B
149 },
150 msgs := {
151 mm := {
152 cMServiceRequest := {
153 messageType := '000000'B, /* overwritten */
154 nsd := '00'B,
Harald Welte6ed6bf92018-01-24 21:09:15 +0100155 cm_ServiceType := int2bit(enum2int(serv_type), 4),
Harald Weltec76f29f2017-11-22 12:46:46 +0100156 cipheringKeySequenceNumber := { '000'B, '0'B },
157 mobileStationClassmark2 := ts_CM2,
158 mobileIdentity := mi_lv,
159 priorityLevel := omit,
160 additionalUpdateParameterTV := omit,
161 deviceProperties := omit
162 }
163 }
164 }
165}
166
Harald Welte0195ab12018-01-24 21:50:20 +0100167template (value) CipheringKeySequenceNumberV ts_CKSN(integer key_seq) := {
168 keySequence := int2bit(key_seq, 3),
169 spare := '0'B
170}
171
172/* Send template for CM RE-ESTABLISH REQUEST */
173template (value) PDU_ML3_MS_NW ts_CM_REEST_REQ(integer cksn, MobileIdentityLV mi_lv) := {
174 discriminator := '0000'B, /* overwritten */
175 tiOrSkip := {
176 skipIndicator := '0000'B
177 },
178 msgs := {
179 mm := {
180 cMReEstablReq := {
181 messageType := '101000'B, /* overwritten */
182 nsd := '00'B,
183 cipheringKeySequenceNumber := ts_CKSN(cksn),
184 spare := '0000'B,
185 mobileStationClassmark2 := ts_CM2,
186 mobileIdentityLV := mi_lv,
187 locationAreaIdentification := omit,
188 deviceProperties := omit
189 }
190 }
191 }
192}
193
194
Harald Welte6ff81902018-01-21 19:09:08 +0100195template PDU_ML3_NW_MS tr_MT_simple(template BIT4 discr := ?) := {
196 discriminator := discr,
197 tiOrSkip := {
198 skipIndicator := '0000'B
199 },
200 msgs := ?
201}
202
203
204template PDU_ML3_NW_MS tr_CM_SERV_ACC := {
205 discriminator := '0101'B,
206 tiOrSkip := {
207 skipIndicator := '0000'B
208 },
209 msgs := {
210 mm := {
211 cMServiceAccept := {
212 messageType := '100001'B,
213 nsd := ?
214 }
215 }
216 }
217}
218
219
Harald Weltecb6cc332018-01-21 13:59:08 +0100220template PDU_ML3_NW_MS tr_CM_SERV_REJ(template OCT1 rej_cause := ?) := {
221 discriminator := '0101'B,
222 tiOrSkip := {
223 skipIndicator := '0000'B
224 },
225 msgs := {
226 mm := {
227 cMServiceReject := {
228 messageType := '100010'B,
229 nsd := ?,
230 rejectCause := rej_cause,
231 t3246_Value := *
232 }
233 }
234 }
235}
236
Harald Weltec76f29f2017-11-22 12:46:46 +0100237/* Send template for PAGING RESPONSE */
238template (value) PDU_ML3_MS_NW ts_PAG_RESP(MobileIdentityLV mi_lv) := {
239 discriminator := '0000'B, /* overwritten */
240 tiOrSkip := {
241 skipIndicator := '0000'B
242 },
243 msgs := {
244 rrm := {
245 pagingResponse := {
246 messageType := '00000000'B, /* overwritten */
247 cipheringKeySequenceNumber := { '000'B, '0'B },
248 spare1_4 := '0000'B,
249 mobileStationClassmark := ts_CM2,
250 mobileIdentity := mi_lv,
251 additionalUpdateParameters := omit
252 }
253 }
254 }
255}
256
Harald Welte15166142017-12-16 23:02:08 +0100257template (value) PDU_ML3_MS_NW ts_RRM_ModeModifyAck(ChannelDescription2_V desc, ChannelMode_V mode) := {
258 discriminator := '0000'B, /* overwritten */
259 tiOrSkip := {
260 skipIndicator := '0000'B
261 },
262 msgs := {
263 rrm := {
264 channelModeModifyAck := {
265 messageType := '00010111'B,
266 channelDescription := desc,
267 channelMode := mode,
268 extendedTSCSet := omit
269 }
270 }
271 }
272}
273
Harald Welte73cd2712017-12-17 00:44:52 +0100274template (value) PDU_ML3_MS_NW ts_RRM_CiphModeCompl := {
275 discriminator := '0000'B, /* overwritten */
276 tiOrSkip := {
277 skipIndicator := '0000'B
278 },
279 msgs := {
280 rrm := {
281 cipheringModeComplete := {
282 messageType := '00110010'B,
283 mobileEquipmentIdentity := omit
284 }
285 }
286 }
287}
288
Harald Welteecb254b2018-01-29 22:01:54 +0100289template (value) PDU_ML3_MS_NW ts_RRM_AssignmentComplete(OCT1 cause) := {
290 discriminator := '0000'B, /* overwritten */
291 tiOrSkip := {
292 skipIndicator := '0000'B
293 },
294 msgs := {
295 rrm := {
296 assignmentComplete := {
297 messageType := '00101001'B,
298 rR_Cause := {
299 valuePart := cause
300 }
301 }
302 }
303 }
304}
Harald Welte15166142017-12-16 23:02:08 +0100305
Harald Welte898113b2018-01-31 18:32:21 +0100306template (value) PDU_ML3_MS_NW ts_RRM_AssignmentFailure(OCT1 cause) := {
307 discriminator := '0000'B, /* overwritten */
308 tiOrSkip := {
309 skipIndicator := '0000'B
310 },
311 msgs := {
312 rrm := {
313 assignmentFailure := {
314 messageType := '00101111'B,
315 rR_Cause := {
316 valuePart := cause
317 }
318 }
319 }
320 }
321}
322
Harald Weltefbf9b5e2018-01-31 20:41:23 +0100323template (value) PDU_ML3_MS_NW ts_RRM_HandoverFailure(OCT1 cause) := {
324 discriminator := '0000'B, /* overwritten */
325 tiOrSkip := {
326 skipIndicator := '0000'B
327 },
328 msgs := {
329 rrm := {
330 handoverFailure := {
331 messageType := '00101000'B,
332 rRCause := {
333 valuePart := cause
334 },
335 pSCause := omit
336 }
337 }
338 }
339}
Harald Welte898113b2018-01-31 18:32:21 +0100340
Harald Welte261af4b2018-02-12 21:20:39 +0100341template (value) PDU_ML3_MS_NW ts_RRM_HandoverComplete(OCT1 cause) := {
342 discriminator := '0000'B, /* overwritten */
343 tiOrSkip := {
344 skipIndicator := '0000'B
345 },
346 msgs := {
347 rrm := {
348 handoverComplete := {
349 messageType := '00101100'B,
350 rRCause := {
351 valuePart := cause
352 },
353 mobileObsservedTimeDiff := omit,
354 mobileTimeDifferenceHyperframe := omit
355 }
356 }
357 }
358}
359
Harald Welte898113b2018-01-31 18:32:21 +0100360function ts_CM3_TLV(template (omit) OCTN cm3) return template MobileStationClassmark3_TLV {
361 if (not isvalue(cm3)) {
362 return omit;
363 }
364 var template MobileStationClassmark3_TLV ret := {
365 elementIdentifier := '20'O,
366 lengthIndicator := 0, /* overwritten */
367 valuePart := cm3
368 }
369 return ret;
370}
371
372template (value) PDU_ML3_MS_NW ts_RRM_CM_CHG(MobileStationClassmark2_LV cm2,
373 template (omit) MobileStationClassmark3_TLV cm3 := omit) := {
374 discriminator := '0110'B,
375 tiOrSkip := {
376 skipIndicator := '0000'B
377 },
378 msgs := {
379 rrm := {
380 classmarkChange := {
381 messageType := '00010110'B,
382 mobileStationClassmark2 := cm2,
383 mobileStationClassmark3 := cm3
384 }
385 }
386 }
387}
388
Harald Weltee3bd6582018-01-31 22:51:25 +0100389template (value) PDU_ML3_MS_NW ts_RRM_UL_REL(OCT1 cause) := {
390 discriminator := '0110'B,
391 tiOrSkip := {
392 skipIndicator := '0000'B
393 },
394 msgs := {
395 rrm := {
396 uplinkRelease := {
397 messageType := '00001110'B,
398 rR_Cause := {
399 valuePart := cause
400 }
401 }
402 }
403 }
404}
405
406template PDU_ML3_MS_NW tr_RRM_RR_STATUS(template OCT1 cause := ?) := {
407 discriminator := '0110'B,
408 tiOrSkip := {
409 skipIndicator := '0000'B
410 },
411 msgs := {
412 rrm := {
413 rR_Status := {
414 messageType := '00010010'B,
415 rR_Cause := {
416 valuePart := cause
417 }
418 }
419 }
420 }
421}
422
423
424
Harald Weltecb6cc332018-01-21 13:59:08 +0100425template PDU_ML3_MS_NW ts_ML3_MO := {
426 discriminator := '0000'B,
427 tiOrSkip := {
428 skipIndicator := '0000'B
429 },
430 msgs := ?
431}
432
433template LocationUpdatingType ts_ML3_IE_LuType := {
434 lut := ?,
435 spare1_1 := '0'B,
436 fop := '0'B
437}
438
439template LocationUpdatingType ts_ML3_IE_LuType_Normal modifies ts_ML3_IE_LuType := {
440 lut := '00'B
441}
442
443template LocationUpdatingType ts_ML3_IE_LuType_Periodic modifies ts_ML3_IE_LuType := {
444 lut := '01'B
445}
446
447template LocationUpdatingType ts_ML3_IE_LuType_Attach modifies ts_ML3_IE_LuType := {
448 lut := '10'B
449}
450
451template CipheringKeySequenceNumberV ts_ML3_IE_CKSN(integer cksn) := {
452 keySequence := int2bit(cksn, 3),
453 spare := '0'B
454}
455
456template PDU_ML3_MS_NW ts_ML3_MO_LU_Req(LocationUpdatingType lu_type, LocationAreaIdentification_V lai,
457 MobileIdentityLV mi, MobileStationClassmark1_V cm1)
458modifies ts_ML3_MO := {
459 msgs := {
460 mm := {
461 locationUpdateRequest := {
462 messageType := '001000'B,
463 nsd := '00'B, /* ? */
464 locationUpdatingType := lu_type,
465 cipheringKeySequenceNumber := ts_ML3_IE_CKSN(0),
466 locationAreaIdentification := lai,
467 mobileStationClassmark1 := cm1,
468 mobileIdentityLV := mi,
469 classmarkInformationType2_forUMTS := omit,
470 additionalUpdateParameterTV := omit,
471 deviceProperties := omit,
472 mS_NetworkFeatureSupport := omit
473 }
474 }
475 }
476}
477
Harald Welte6ff81902018-01-21 19:09:08 +0100478template PDU_ML3_MS_NW ts_ML3_MO_TmsiRealloc_Cmpl modifies ts_ML3_MO := {
479 msgs := {
480 mm := {
481 tmsiReallocComplete := {
482 messageType := '011011'B,
483 nsd := '00'B
484 }
485 }
486 }
487}
488
489template PDU_ML3_NW_MS tr_ML3_MT_LU_Acc := {
490 discriminator := '0101'B,
491 tiOrSkip := {
492 skipIndicator := '0000'B
493 },
494 msgs := {
495 mm := {
496 locationUpdateAccept := {
497 messageType := '000010'B,
498 nsd := '00'B,
499 locationAreaIdentification := ?,
500 mobileIdentityTLV := *,
501 followOnProceed := *,
502 cTS_Permission := *,
503 equivalentPLMNs := *,
504 emergencyNumberList := *,
505 perMS_T3212 := *
506 }
507 }
508 }
509}
510
511template PDU_ML3_NW_MS tr_ML3_MT_LU_Rej(template OCT1 cause := ?) := {
512 discriminator := '0101'B,
513 tiOrSkip := {
514 skipIndicator := '0000'B
515 },
516 msgs := {
517 mm := {
518 locationUpdateReject := {
519 messageType := '000100'B,
520 nsd := '00'B,
521 rejectCause := cause,
522 t3246_Value := *
523 }
524 }
525 }
526}
527
Harald Welteba7b6d92018-01-23 21:32:34 +0100528template PDU_ML3_NW_MS tr_ML3_MT_MM_ID_Req(template BIT3 id_type := ?) := {
529 discriminator := '0101'B,
530 tiOrSkip := {
531 skipIndicator := '0000'B
532 },
533 msgs := {
534 mm := {
535 identityRequest := {
536 messageType := '011000'B,
537 nsd := '00'B,
538 identityType := id_type,
539 spare1_5 := ?
540 }
541 }
542 }
543}
544
545template PDU_ML3_MS_NW ts_ML3_MO_MM_ID_Rsp(MobileIdentityLV mi) modifies ts_ML3_MO := {
546 msgs := {
547 mm := {
548 identityResponse := {
549 messageType := '011001'B,
550 nsd := '00'B,
551 mobileIdentityLV := mi,
552 p_TMSI_TypeTV := omit,
553 routingAreaIdentification2TLV := omit,
554 p_TMSISignature2TLV := omit
555 }
556 }
557 }
558}
559template PDU_ML3_MS_NW ts_ML3_MO_MM_ID_Rsp_IMSI(hexstring imsi) :=
560 ts_ML3_MO_MM_ID_Rsp(valueof(ts_MI_IMSI_LV(imsi)));
561template PDU_ML3_MS_NW ts_ML3_MO_MM_ID_Rsp_IMEI(hexstring imei) :=
562 ts_ML3_MO_MM_ID_Rsp(valueof(ts_MI_IMEI_LV(imei)));
563
564
Harald Welte45164da2018-01-24 12:51:27 +0100565template (value) MobileStationClassmark1_V ts_CM1(BIT1 a5_1_unavail := '0'B, BIT2 rev := '10'B) := {
566 rf_PowerCapability := '010'B,
567 a5_1 := a5_1_unavail,
568 esind := '1'B,
569 revisionLevel := rev,
570 spare1_1 := '0'B
571}
572
573template PDU_ML3_MS_NW ts_ML3_MO_MM_IMSI_DET_Ind(MobileIdentityLV mi,
574 template MobileStationClassmark1_V cm1 := ts_CM1)
575modifies ts_ML3_MO := {
576 msgs := {
577 mm := {
578 imsiDetachIndication := {
579 messageType := '000001'B,
580 nsd := '00'B,
581 mobileStationClassmark1 := cm1,
582 mobileIdentityLV := mi
583 }
584 }
585 }
586}
587
Harald Welted748a052018-01-22 02:59:24 +0100588template PDU_ML3_MS_NW ts_ML3_MO_CC(integer tid) := {
589 discriminator := '0011'B,
590 tiOrSkip := {
591 transactionId := {
Daniel Willmanndcf9eb92018-02-02 20:07:52 +0100592 tio := int2bit(tid, 3),
Harald Welted748a052018-01-22 02:59:24 +0100593 tiFlag := '0'B,
594 tIExtension := omit
595 }
596 }
597}
598
599template (value) CalledPartyBCD_Number ts_Called(hexstring digits) := {
600 elementIdentifier := '5E'O,
601 lengthIndicator := 0, /* overwritten */
602 numberingPlanIdentification := '0000'B,
603 typeOfNumber := '000'B, /* unknown */
604 ext1 := '0'B,
605 digits := digits
606}
607
Harald Welte812f7a42018-01-27 00:49:18 +0100608template CalledPartyBCD_Number tr_Called(template hexstring digits) := {
609 elementIdentifier := '5E'O,
610 lengthIndicator := ?,
611 numberingPlanIdentification := ?,
612 typeOfNumber := ?,
613 ext1 := ?,
614 digits := digits
615}
616
617template CallingPartyBCD_Number tr_Calling(template hexstring digits) := {
618 elementIdentifier := '5C'O,
619 lengthIndicator := ?,
620 oct3 := ?,
621 digits := digits
622}
623
Harald Welte4b2b3a62018-01-26 10:32:39 +0100624type integer SpeechVer;
625
626template (value) Speech_AuxiliarySpeech ts_SpeechAux(SpeechVer ver, BIT1 suffix) := {
627 speechVersionIndication := int2bit(ver-1,3) & suffix,
628 spare1_1 := '0'B,
629 cTM_or_Spare := '0'B,
630 coding := '0'B,
631 extension_octet_3a_3b := '0'B
632}
633
634template (value) Speech_AuxiliarySpeech ts_SpeechAuxFR(SpeechVer ver) := ts_SpeechAux(ver, '0'B);
635template (value) Speech_AuxiliarySpeech ts_SpeechAuxHR(SpeechVer ver) := ts_SpeechAux(ver, '1'B);
636
Harald Welted748a052018-01-22 02:59:24 +0100637template (value) BearerCapability_TLV ts_Bcap_voice := {
638 elementIdentifier := '04'O,
639 lengthIndicator := 0, /* overwritten */
640 octet3 := {
641 informationTransferCapability := '000'B,
642 transferMode := '0'B,
643 codingStandard := '0'B,
644 radioChannelRequirement := '11'B, /* FR preferred */
645 extension_octet_3 := '0'B, /* overwritten */
Harald Welte4b2b3a62018-01-26 10:32:39 +0100646 speech_aux_3a_3b := {
647 valueof(ts_SpeechAuxHR(3)),
648 valueof(ts_SpeechAuxFR(3)),
649 valueof(ts_SpeechAuxFR(2)),
650 valueof(ts_SpeechAuxFR(1)),
651 valueof(ts_SpeechAuxHR(1))
652 }
Harald Welted748a052018-01-22 02:59:24 +0100653 },
654 octet4 := omit,
655 octet5 := omit,
656 octet6 := omit,
657 octet7 := omit
658}
659
660template PDU_ML3_MS_NW ts_ML3_MO_CC_SETUP(integer tid, hexstring called, template BearerCapability_TLV bcap := ts_Bcap_voice) := {
661 discriminator := '0011'B,
662 tiOrSkip := {
663 transactionId := {
664 tio := int2bit(tid, 3),
665 tiFlag := '0'B,
666 tIExtension := omit
667 }
668 },
669 msgs := {
670 cc := {
671 setup_MS_NW := {
672 messageType := '000101'B,
673 nsd := '00'B,
674 bcRepeatIndicator := omit,
675 bearerCapability1 := bcap,
676 bearerCapability2 := omit,
677 facility := omit,
678 callingPartySubAddress := omit,
679 calledPartyBCD_Number := ts_Called(called),
680 calledPartySubAddress := omit,
681 llc_RepeatIndicator := omit,
682 lowLayerCompatibility1 := omit,
683 lowLayerCompatibility2 := omit,
684 hlc_RepeatIndicator := omit,
685 highLayerCompatibility1 := omit,
686 highLayerCompatibility2 := omit,
687 user_user := omit,
688 ss_VersionIndicator := omit,
689 clir_Suppression := omit,
690 clir_Invocation := omit,
691 cC_Capabilities := omit,
692 facility_ccbs1 := omit,
693 facility_ccbs2 := omit,
694 streamIdentifier := omit,
695 supportedCodecs := omit,
696 redial := omit
697 }
698 }
699 }
700}
701
Harald Welte45164da2018-01-24 12:51:27 +0100702template PDU_ML3_MS_NW ts_ML3_MO_CC_EMERG_SETUP(integer tid, template BearerCapability_TLV bcap := ts_Bcap_voice) := {
703 discriminator := '0011'B,
704 tiOrSkip := {
705 transactionId := {
706 tio := int2bit(tid, 3),
707 tiFlag := '0'B,
708 tIExtension := omit
709 }
710 },
711 msgs := {
712 cc := {
713 emergencySetup := {
714 messageType := '001110'B,
715 nsd := '00'B,
716 bearerCapability := bcap,
717 streamIdentifier := omit,
718 supportedCodecs := omit,
719 emergencyCategory := omit
720 }
721 }
722 }
723}
724
725
Harald Welted748a052018-01-22 02:59:24 +0100726template PDU_ML3_NW_MS tr_ML3_MT_CC_CALL_PROC(integer tid) := {
727 discriminator := '0011'B,
728 tiOrSkip := {
729 transactionId := {
730 tio := int2bit(tid, 3),
731 tiFlag := ?,
732 tIExtension := omit
733 }
734 },
735 msgs := {
736 cc := {
737 callProceeding := {
738 messageType := '000010'B,
739 nsd := '00'B,
740 repeatIndicator := *,
741 bearerCapability1 := *,
742 bearerCapability2 := *,
743 facility := *,
744 progressIndicator := *,
745 priorityGranted := *,
746 networkCCCapabilities := *
747 }
748 }
749 }
750}
751
752template PDU_ML3_NW_MS tr_ML3_MT_CC_ALERTING(integer tid) := {
753 discriminator := '0011'B,
754 tiOrSkip := {
755 transactionId := {
756 tio := int2bit(tid, 3),
757 tiFlag := ?,
758 tIExtension := omit
759 }
760 },
761 msgs := {
762 cc := {
763 alerting_NW_MS := {
764 messageType := '000001'B,
765 nsd := '00'B,
766 facility := *,
767 progressIndicator := *,
768 user_user := *
769 }
770 }
771 }
772}
773
Harald Welte33ec09b2018-02-10 15:34:46 +0100774template PDU_ML3_MS_NW ts_ML3_MO_CC_ALERTING(integer tid) := {
775 discriminator := '0011'B,
776 tiOrSkip := {
777 transactionId := {
778 tio := int2bit(tid, 3),
779 tiFlag := '1'B,
780 tIExtension := omit
781 }
782 },
783 msgs := {
784 cc := {
785 alerting_MS_NW := {
786 messageType := '000001'B,
787 nsd := '00'B,
788 facility := omit,
789 user_user := omit,
790 ss_VersionIndicator := omit
791 }
792 }
793 }
794}
795
796template PDU_ML3_MS_NW ts_ML3_MT_CC_ALERTING(integer tid) := {
797 discriminator := '0011'B,
798 tiOrSkip := {
799 transactionId := {
800 tio := int2bit(tid, 3),
801 tiFlag := '1'B,
802 tIExtension := omit
803 }
804 },
805 msgs := {
806 cc := {
807 alerting_MS_NW := {
808 messageType := '000001'B,
809 nsd := '00'B,
810 facility := omit,
811 user_user := omit,
812 ss_VersionIndicator := omit
813 }
814 }
815 }
816}
817
818template PDU_ML3_MS_NW ts_ML3_MO_CC_CONNECT(integer tid) := {
819 discriminator := '0011'B,
820 tiOrSkip := {
821 transactionId := {
822 tio := int2bit(tid, 3),
823 tiFlag := '1'B,
824 tIExtension := omit
825 }
826 },
827 msgs := {
828 cc := {
829 connect_MS_NW := {
830 messageType := '000111'B,
831 nsd := '00'B,
832 facility := omit,
833 connectedSubAddress := omit,
834 user_user := omit,
835 ss_VersionIndicator := omit,
836 streamIdentifier := omit
837 }
838 }
839 }
840}
841
Harald Welte4017d552018-01-26 21:40:05 +0100842template PDU_ML3_NW_MS tr_ML3_MT_CC_CONNECT(integer tid) := {
843 discriminator := '0011'B,
844 tiOrSkip := {
845 transactionId := {
846 tio := int2bit(tid, 3),
847 tiFlag := '1'B,
848 tIExtension := omit
849 }
850 },
851 msgs := {
852 cc := {
853 connect_NW_MS := {
854 messageType := '000111'B,
855 nsd := '00'B,
856 facility := *,
857 progressIndicator := *,
858 connectedNumber := *,
859 connectedSubAddress := *,
860 user_user := *
861 }
862 }
863 }
864}
865
866template (value) PDU_ML3_MS_NW ts_ML3_MO_CC_CONNECT_ACK(integer tid) := {
867 discriminator := '0011'B,
868 tiOrSkip := {
869 transactionId := {
870 tio := int2bit(tid, 3),
871 tiFlag := '0'B,
872 tIExtension := omit
873 }
874 },
875 msgs := {
876 cc := {
877 connectAck := {
878 messageType := '001111'B,
879 nsd := '00'B
880 }
881 }
882 }
883}
884
Daniel Willmann8b084372018-02-04 13:35:26 +0100885template (value) PDU_ML3_MS_NW ts_ML3_MO_CC_START_DTMF(integer tid, charstring number) := {
886 discriminator := '0011'B,
887 tiOrSkip := {
888 transactionId := {
889 tio := int2bit(tid, 3),
890 tiFlag := '0'B,
891 tIExtension := omit
892 }
893 },
894 msgs := {
895 cc := {
896 startDTMF := {
897 messageType := '110101'B,
898 nsd := '00'B,
899 keypadFacility := {
900 elementIdentifier := '2C'O,
901 keypadInformation := int2bit(char2int(number), 7),
902 spare_1 := '0'B
903 }
904 }
905 }
906 }
907}
908
Harald Welte2bb825f2018-01-22 11:31:18 +0100909template PDU_ML3_NW_MS tr_ML3_MT_CC_DISC(integer tid) := {
910 discriminator := '0011'B,
911 tiOrSkip := {
912 transactionId := {
913 tio := int2bit(tid, 3),
914 tiFlag := ?,
915 tIExtension := omit
916 }
917 },
918 msgs := {
919 cc := {
920 disconnect_NW_MS := {
921 messageType := '100101'B,
922 nsd := '00'B,
923 cause := ?,
924 facility := *,
925 progressIndicator := *,
926 user_user := *,
927 allowedActions := *
928 }
929 }
930 }
931}
932
933template PDU_ML3_NW_MS tr_ML3_MT_CC_RELEASE(integer tid) := {
934 discriminator := '0011'B,
935 tiOrSkip := {
936 transactionId := {
937 tio := int2bit(tid, 3),
938 tiFlag := ?,
939 tIExtension := omit
940 }
941 },
942 msgs := {
943 cc := {
944 release_NW_MS := {
945 messageType := '101101'B,
946 nsd := '00'B,
947 cause := ?,
948 secondCause := *,
949 facility := *,
950 user_user := *
951 }
952 }
953 }
954}
Harald Welted748a052018-01-22 02:59:24 +0100955
Harald Welte33ec09b2018-02-10 15:34:46 +0100956template PDU_ML3_MS_NW ts_ML3_MO_CC_RELEASE(integer tid, BIT1 tid_remote, BIT7 cause) := {
957 discriminator := '0011'B,
958 tiOrSkip := {
959 transactionId := {
960 tio := int2bit(tid, 3),
961 tiFlag := tid_remote,
962 tIExtension := omit
963 }
964 },
965 msgs := {
966 cc := {
967 release_MS_NW := {
968 messageType := '101101'B,
969 nsd := '00'B,
970 cause := ts_ML3_Cause(cause),
971 secondCause := omit,
972 facility := omit,
973 user_user := omit,
974 ss_VersionIndicator := omit
975 }
976 }
977 }
978}
979
980
Harald Welteb71901a2018-01-26 19:16:05 +0100981template (value) PDU_ML3_MS_NW ts_ML3_MO_CC_REL_COMPL(integer tid) := {
982 discriminator := '0011'B,
983 tiOrSkip := {
984 transactionId := {
985 tio := int2bit(tid, 3),
986 tiFlag := '0'B,
987 tIExtension := omit
988 }
989 },
990 msgs := {
991 cc := {
992 releaseComplete_MS_NW := {
993 messageType := '101010'B,
994 nsd := '00'B,
995 cause := omit,
996 facility := omit,
997 user_user := omit,
998 ss_VersionIndicator := omit
999 }
1000 }
1001 }
1002}
1003
Harald Welte33ec09b2018-02-10 15:34:46 +01001004template PDU_ML3_NW_MS tr_ML3_MT_CC_REL_COMPL(integer tid) := {
1005 discriminator := '0011'B,
1006 tiOrSkip := {
1007 transactionId := {
1008 tio := int2bit(tid, 3),
1009 tiFlag := ?,
1010 tIExtension := omit
1011 }
1012 },
1013 msgs := {
1014 cc := {
1015 releaseComplete_NW_MS := {
1016 messageType := '101010'B,
1017 nsd := '00'B,
1018 cause := *,
1019 facility := *,
1020 user_user := *
1021 }
1022 }
1023 }
1024}
1025
1026
Harald Welteb71901a2018-01-26 19:16:05 +01001027
Harald Welte77a8eba2018-01-22 21:22:32 +01001028template PDU_ML3_NW_MS tr_ML3_MT_MM_AUTH_REQ(template OCT16 rand := ?) := {
1029 discriminator := '0101'B,
1030 tiOrSkip := {
1031 skipIndicator := '0000'B
1032 },
1033 msgs := {
1034 mm := {
1035 authenticationRequest := {
1036 messageType := '010010'B,
1037 nsd := '00'B,
1038 cipheringKeySequenceNumber := ?,
1039 spare2_4 := ?,
1040 authenticationParRAND := rand,
1041 authenticationParAUTN := *
1042 }
1043 }
1044 }
1045}
1046
1047template (value) PDU_ML3_MS_NW ts_ML3_MT_MM_AUTH_RESP_2G(OCT4 sres) := {
1048 discriminator := '0101'B,
1049 tiOrSkip := {
1050 skipIndicator := '0000'B
1051 },
1052 msgs := {
1053 mm := {
1054 authenticationResponse := {
1055 messageType := '010100'B,
1056 nsd := '00'B,
1057 authenticationParSRES := sres,
1058 authenticationParSRESext := omit
1059 }
1060 }
1061 }
1062}
1063
1064template (value) PDU_ML3_MS_NW ts_ML3_MT_MM_AUTH_RESP_3G(OCT4 sres, octetstring res) := {
1065 discriminator := '0101'B,
1066 tiOrSkip := {
1067 skipIndicator := '0000'B
1068 },
1069 msgs := {
1070 mm := {
1071 authenticationResponse := {
1072 messageType := '010100'B,
1073 nsd := '00'B,
1074 authenticationParSRES := sres,
1075 authenticationParSRESext := {
1076 elementIdentifier := '21'O,
1077 lengthIndicator := 0, /* overwritten */
1078 valueField := res
1079 }
1080 }
1081 }
1082 }
1083}
Harald Weltecb6cc332018-01-21 13:59:08 +01001084
Harald Welte812f7a42018-01-27 00:49:18 +01001085template PDU_ML3_MS_NW ts_ML3_MO_CC_CALL_CONF(integer tid,
1086 template BearerCapability_TLV bcap := omit) := {
1087 discriminator := '0011'B,
1088 tiOrSkip := {
1089 transactionId := {
1090 tio := int2bit(tid, 3),
1091 tiFlag := '1'B, /* response from destination */
1092 tIExtension := omit
1093 }
1094 },
1095 msgs := {
1096 cc := {
1097 callConfirmed := {
1098 messageType := '001000'B,
1099 nsd := '00'B,
1100 repeatIndicator := omit,
1101 bearerCapability1 := bcap,
1102 bearerCapability2 := omit,
1103 cause := omit,
1104 cC_Capabilities := omit,
1105 streamIdentifier := omit,
1106 supportedCodecs := omit
1107 }
1108 }
1109 }
1110}
1111
1112
1113template PDU_ML3_NW_MS tr_ML3_MT_CC_SETUP(integer tid, template hexstring called := *,
1114 template hexstring calling := *,
1115 template BearerCapability_TLV bcap := *) := {
1116 discriminator := '0011'B,
1117 tiOrSkip := {
1118 transactionId := {
1119 tio := int2bit(tid, 3),
1120 tiFlag := '0'B, /* from originator */
1121 tIExtension := omit
1122 }
1123 },
1124 msgs := {
1125 cc := {
1126 setup_NW_MS := {
1127 messageType := '000101'B,
1128 nsd := '00'B,
1129 bcRepeatIndicator := *,
1130 bearerCapability1 := bcap,
1131 bearerCapability2 := *,
1132 facility := *,
1133 progressIndicator := *,
1134 signal := *,
1135 callingPartyBCD_Number := tr_Calling(calling) ifpresent,
1136 callingPartySubAddress := *,
1137 calledPartyBCD_Number := tr_Called(called) ifpresent,
1138 calledPartySubAddress := *,
1139 redirectingPartyBCDNumber := *,
1140 redirectingPartySubaddress := *,
1141 llc_RepeatIndicator := *,
1142 lowLayerCompatibility1 := *,
1143 lowLayerCompatibility2 := *,
1144 hlc_RepeatIndicator := *,
1145 highLayerCompatibility1 := *,
1146 highLayerCompatibility2 := *,
1147 user_user := *,
1148 priority := *,
1149 alert := *,
1150 networkCCCapabilities := *,
1151 causeofNoCli := *,
1152 backupBearerCapacity := *
1153 }
1154 }
1155 }
1156}
1157
1158
Harald Weltecb6cc332018-01-21 13:59:08 +01001159
Harald Weltec76f29f2017-11-22 12:46:46 +01001160}