blob: d2ee605f7e297be7e4d9a4d5bedbd5482d1a5c6c [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
341function ts_CM3_TLV(template (omit) OCTN cm3) return template MobileStationClassmark3_TLV {
342 if (not isvalue(cm3)) {
343 return omit;
344 }
345 var template MobileStationClassmark3_TLV ret := {
346 elementIdentifier := '20'O,
347 lengthIndicator := 0, /* overwritten */
348 valuePart := cm3
349 }
350 return ret;
351}
352
353template (value) PDU_ML3_MS_NW ts_RRM_CM_CHG(MobileStationClassmark2_LV cm2,
354 template (omit) MobileStationClassmark3_TLV cm3 := omit) := {
355 discriminator := '0110'B,
356 tiOrSkip := {
357 skipIndicator := '0000'B
358 },
359 msgs := {
360 rrm := {
361 classmarkChange := {
362 messageType := '00010110'B,
363 mobileStationClassmark2 := cm2,
364 mobileStationClassmark3 := cm3
365 }
366 }
367 }
368}
369
Harald Weltee3bd6582018-01-31 22:51:25 +0100370template (value) PDU_ML3_MS_NW ts_RRM_UL_REL(OCT1 cause) := {
371 discriminator := '0110'B,
372 tiOrSkip := {
373 skipIndicator := '0000'B
374 },
375 msgs := {
376 rrm := {
377 uplinkRelease := {
378 messageType := '00001110'B,
379 rR_Cause := {
380 valuePart := cause
381 }
382 }
383 }
384 }
385}
386
387template PDU_ML3_MS_NW tr_RRM_RR_STATUS(template OCT1 cause := ?) := {
388 discriminator := '0110'B,
389 tiOrSkip := {
390 skipIndicator := '0000'B
391 },
392 msgs := {
393 rrm := {
394 rR_Status := {
395 messageType := '00010010'B,
396 rR_Cause := {
397 valuePart := cause
398 }
399 }
400 }
401 }
402}
403
404
405
Harald Weltecb6cc332018-01-21 13:59:08 +0100406template PDU_ML3_MS_NW ts_ML3_MO := {
407 discriminator := '0000'B,
408 tiOrSkip := {
409 skipIndicator := '0000'B
410 },
411 msgs := ?
412}
413
414template LocationUpdatingType ts_ML3_IE_LuType := {
415 lut := ?,
416 spare1_1 := '0'B,
417 fop := '0'B
418}
419
420template LocationUpdatingType ts_ML3_IE_LuType_Normal modifies ts_ML3_IE_LuType := {
421 lut := '00'B
422}
423
424template LocationUpdatingType ts_ML3_IE_LuType_Periodic modifies ts_ML3_IE_LuType := {
425 lut := '01'B
426}
427
428template LocationUpdatingType ts_ML3_IE_LuType_Attach modifies ts_ML3_IE_LuType := {
429 lut := '10'B
430}
431
432template CipheringKeySequenceNumberV ts_ML3_IE_CKSN(integer cksn) := {
433 keySequence := int2bit(cksn, 3),
434 spare := '0'B
435}
436
437template PDU_ML3_MS_NW ts_ML3_MO_LU_Req(LocationUpdatingType lu_type, LocationAreaIdentification_V lai,
438 MobileIdentityLV mi, MobileStationClassmark1_V cm1)
439modifies ts_ML3_MO := {
440 msgs := {
441 mm := {
442 locationUpdateRequest := {
443 messageType := '001000'B,
444 nsd := '00'B, /* ? */
445 locationUpdatingType := lu_type,
446 cipheringKeySequenceNumber := ts_ML3_IE_CKSN(0),
447 locationAreaIdentification := lai,
448 mobileStationClassmark1 := cm1,
449 mobileIdentityLV := mi,
450 classmarkInformationType2_forUMTS := omit,
451 additionalUpdateParameterTV := omit,
452 deviceProperties := omit,
453 mS_NetworkFeatureSupport := omit
454 }
455 }
456 }
457}
458
Harald Welte6ff81902018-01-21 19:09:08 +0100459template PDU_ML3_MS_NW ts_ML3_MO_TmsiRealloc_Cmpl modifies ts_ML3_MO := {
460 msgs := {
461 mm := {
462 tmsiReallocComplete := {
463 messageType := '011011'B,
464 nsd := '00'B
465 }
466 }
467 }
468}
469
470template PDU_ML3_NW_MS tr_ML3_MT_LU_Acc := {
471 discriminator := '0101'B,
472 tiOrSkip := {
473 skipIndicator := '0000'B
474 },
475 msgs := {
476 mm := {
477 locationUpdateAccept := {
478 messageType := '000010'B,
479 nsd := '00'B,
480 locationAreaIdentification := ?,
481 mobileIdentityTLV := *,
482 followOnProceed := *,
483 cTS_Permission := *,
484 equivalentPLMNs := *,
485 emergencyNumberList := *,
486 perMS_T3212 := *
487 }
488 }
489 }
490}
491
492template PDU_ML3_NW_MS tr_ML3_MT_LU_Rej(template OCT1 cause := ?) := {
493 discriminator := '0101'B,
494 tiOrSkip := {
495 skipIndicator := '0000'B
496 },
497 msgs := {
498 mm := {
499 locationUpdateReject := {
500 messageType := '000100'B,
501 nsd := '00'B,
502 rejectCause := cause,
503 t3246_Value := *
504 }
505 }
506 }
507}
508
Harald Welteba7b6d92018-01-23 21:32:34 +0100509template PDU_ML3_NW_MS tr_ML3_MT_MM_ID_Req(template BIT3 id_type := ?) := {
510 discriminator := '0101'B,
511 tiOrSkip := {
512 skipIndicator := '0000'B
513 },
514 msgs := {
515 mm := {
516 identityRequest := {
517 messageType := '011000'B,
518 nsd := '00'B,
519 identityType := id_type,
520 spare1_5 := ?
521 }
522 }
523 }
524}
525
526template PDU_ML3_MS_NW ts_ML3_MO_MM_ID_Rsp(MobileIdentityLV mi) modifies ts_ML3_MO := {
527 msgs := {
528 mm := {
529 identityResponse := {
530 messageType := '011001'B,
531 nsd := '00'B,
532 mobileIdentityLV := mi,
533 p_TMSI_TypeTV := omit,
534 routingAreaIdentification2TLV := omit,
535 p_TMSISignature2TLV := omit
536 }
537 }
538 }
539}
540template PDU_ML3_MS_NW ts_ML3_MO_MM_ID_Rsp_IMSI(hexstring imsi) :=
541 ts_ML3_MO_MM_ID_Rsp(valueof(ts_MI_IMSI_LV(imsi)));
542template PDU_ML3_MS_NW ts_ML3_MO_MM_ID_Rsp_IMEI(hexstring imei) :=
543 ts_ML3_MO_MM_ID_Rsp(valueof(ts_MI_IMEI_LV(imei)));
544
545
Harald Welte45164da2018-01-24 12:51:27 +0100546template (value) MobileStationClassmark1_V ts_CM1(BIT1 a5_1_unavail := '0'B, BIT2 rev := '10'B) := {
547 rf_PowerCapability := '010'B,
548 a5_1 := a5_1_unavail,
549 esind := '1'B,
550 revisionLevel := rev,
551 spare1_1 := '0'B
552}
553
554template PDU_ML3_MS_NW ts_ML3_MO_MM_IMSI_DET_Ind(MobileIdentityLV mi,
555 template MobileStationClassmark1_V cm1 := ts_CM1)
556modifies ts_ML3_MO := {
557 msgs := {
558 mm := {
559 imsiDetachIndication := {
560 messageType := '000001'B,
561 nsd := '00'B,
562 mobileStationClassmark1 := cm1,
563 mobileIdentityLV := mi
564 }
565 }
566 }
567}
568
Harald Welted748a052018-01-22 02:59:24 +0100569template PDU_ML3_MS_NW ts_ML3_MO_CC(integer tid) := {
570 discriminator := '0011'B,
571 tiOrSkip := {
572 transactionId := {
Daniel Willmanndcf9eb92018-02-02 20:07:52 +0100573 tio := int2bit(tid, 3),
Harald Welted748a052018-01-22 02:59:24 +0100574 tiFlag := '0'B,
575 tIExtension := omit
576 }
577 }
578}
579
580template (value) CalledPartyBCD_Number ts_Called(hexstring digits) := {
581 elementIdentifier := '5E'O,
582 lengthIndicator := 0, /* overwritten */
583 numberingPlanIdentification := '0000'B,
584 typeOfNumber := '000'B, /* unknown */
585 ext1 := '0'B,
586 digits := digits
587}
588
Harald Welte812f7a42018-01-27 00:49:18 +0100589template CalledPartyBCD_Number tr_Called(template hexstring digits) := {
590 elementIdentifier := '5E'O,
591 lengthIndicator := ?,
592 numberingPlanIdentification := ?,
593 typeOfNumber := ?,
594 ext1 := ?,
595 digits := digits
596}
597
598template CallingPartyBCD_Number tr_Calling(template hexstring digits) := {
599 elementIdentifier := '5C'O,
600 lengthIndicator := ?,
601 oct3 := ?,
602 digits := digits
603}
604
Harald Welte4b2b3a62018-01-26 10:32:39 +0100605type integer SpeechVer;
606
607template (value) Speech_AuxiliarySpeech ts_SpeechAux(SpeechVer ver, BIT1 suffix) := {
608 speechVersionIndication := int2bit(ver-1,3) & suffix,
609 spare1_1 := '0'B,
610 cTM_or_Spare := '0'B,
611 coding := '0'B,
612 extension_octet_3a_3b := '0'B
613}
614
615template (value) Speech_AuxiliarySpeech ts_SpeechAuxFR(SpeechVer ver) := ts_SpeechAux(ver, '0'B);
616template (value) Speech_AuxiliarySpeech ts_SpeechAuxHR(SpeechVer ver) := ts_SpeechAux(ver, '1'B);
617
Harald Welted748a052018-01-22 02:59:24 +0100618template (value) BearerCapability_TLV ts_Bcap_voice := {
619 elementIdentifier := '04'O,
620 lengthIndicator := 0, /* overwritten */
621 octet3 := {
622 informationTransferCapability := '000'B,
623 transferMode := '0'B,
624 codingStandard := '0'B,
625 radioChannelRequirement := '11'B, /* FR preferred */
626 extension_octet_3 := '0'B, /* overwritten */
Harald Welte4b2b3a62018-01-26 10:32:39 +0100627 speech_aux_3a_3b := {
628 valueof(ts_SpeechAuxHR(3)),
629 valueof(ts_SpeechAuxFR(3)),
630 valueof(ts_SpeechAuxFR(2)),
631 valueof(ts_SpeechAuxFR(1)),
632 valueof(ts_SpeechAuxHR(1))
633 }
Harald Welted748a052018-01-22 02:59:24 +0100634 },
635 octet4 := omit,
636 octet5 := omit,
637 octet6 := omit,
638 octet7 := omit
639}
640
641template PDU_ML3_MS_NW ts_ML3_MO_CC_SETUP(integer tid, hexstring called, template BearerCapability_TLV bcap := ts_Bcap_voice) := {
642 discriminator := '0011'B,
643 tiOrSkip := {
644 transactionId := {
645 tio := int2bit(tid, 3),
646 tiFlag := '0'B,
647 tIExtension := omit
648 }
649 },
650 msgs := {
651 cc := {
652 setup_MS_NW := {
653 messageType := '000101'B,
654 nsd := '00'B,
655 bcRepeatIndicator := omit,
656 bearerCapability1 := bcap,
657 bearerCapability2 := omit,
658 facility := omit,
659 callingPartySubAddress := omit,
660 calledPartyBCD_Number := ts_Called(called),
661 calledPartySubAddress := omit,
662 llc_RepeatIndicator := omit,
663 lowLayerCompatibility1 := omit,
664 lowLayerCompatibility2 := omit,
665 hlc_RepeatIndicator := omit,
666 highLayerCompatibility1 := omit,
667 highLayerCompatibility2 := omit,
668 user_user := omit,
669 ss_VersionIndicator := omit,
670 clir_Suppression := omit,
671 clir_Invocation := omit,
672 cC_Capabilities := omit,
673 facility_ccbs1 := omit,
674 facility_ccbs2 := omit,
675 streamIdentifier := omit,
676 supportedCodecs := omit,
677 redial := omit
678 }
679 }
680 }
681}
682
Harald Welte45164da2018-01-24 12:51:27 +0100683template PDU_ML3_MS_NW ts_ML3_MO_CC_EMERG_SETUP(integer tid, template BearerCapability_TLV bcap := ts_Bcap_voice) := {
684 discriminator := '0011'B,
685 tiOrSkip := {
686 transactionId := {
687 tio := int2bit(tid, 3),
688 tiFlag := '0'B,
689 tIExtension := omit
690 }
691 },
692 msgs := {
693 cc := {
694 emergencySetup := {
695 messageType := '001110'B,
696 nsd := '00'B,
697 bearerCapability := bcap,
698 streamIdentifier := omit,
699 supportedCodecs := omit,
700 emergencyCategory := omit
701 }
702 }
703 }
704}
705
706
Harald Welted748a052018-01-22 02:59:24 +0100707template PDU_ML3_NW_MS tr_ML3_MT_CC_CALL_PROC(integer tid) := {
708 discriminator := '0011'B,
709 tiOrSkip := {
710 transactionId := {
711 tio := int2bit(tid, 3),
712 tiFlag := ?,
713 tIExtension := omit
714 }
715 },
716 msgs := {
717 cc := {
718 callProceeding := {
719 messageType := '000010'B,
720 nsd := '00'B,
721 repeatIndicator := *,
722 bearerCapability1 := *,
723 bearerCapability2 := *,
724 facility := *,
725 progressIndicator := *,
726 priorityGranted := *,
727 networkCCCapabilities := *
728 }
729 }
730 }
731}
732
733template PDU_ML3_NW_MS tr_ML3_MT_CC_ALERTING(integer tid) := {
734 discriminator := '0011'B,
735 tiOrSkip := {
736 transactionId := {
737 tio := int2bit(tid, 3),
738 tiFlag := ?,
739 tIExtension := omit
740 }
741 },
742 msgs := {
743 cc := {
744 alerting_NW_MS := {
745 messageType := '000001'B,
746 nsd := '00'B,
747 facility := *,
748 progressIndicator := *,
749 user_user := *
750 }
751 }
752 }
753}
754
Harald Welte33ec09b2018-02-10 15:34:46 +0100755template PDU_ML3_MS_NW ts_ML3_MO_CC_ALERTING(integer tid) := {
756 discriminator := '0011'B,
757 tiOrSkip := {
758 transactionId := {
759 tio := int2bit(tid, 3),
760 tiFlag := '1'B,
761 tIExtension := omit
762 }
763 },
764 msgs := {
765 cc := {
766 alerting_MS_NW := {
767 messageType := '000001'B,
768 nsd := '00'B,
769 facility := omit,
770 user_user := omit,
771 ss_VersionIndicator := omit
772 }
773 }
774 }
775}
776
777template PDU_ML3_MS_NW ts_ML3_MT_CC_ALERTING(integer tid) := {
778 discriminator := '0011'B,
779 tiOrSkip := {
780 transactionId := {
781 tio := int2bit(tid, 3),
782 tiFlag := '1'B,
783 tIExtension := omit
784 }
785 },
786 msgs := {
787 cc := {
788 alerting_MS_NW := {
789 messageType := '000001'B,
790 nsd := '00'B,
791 facility := omit,
792 user_user := omit,
793 ss_VersionIndicator := omit
794 }
795 }
796 }
797}
798
799template PDU_ML3_MS_NW ts_ML3_MO_CC_CONNECT(integer tid) := {
800 discriminator := '0011'B,
801 tiOrSkip := {
802 transactionId := {
803 tio := int2bit(tid, 3),
804 tiFlag := '1'B,
805 tIExtension := omit
806 }
807 },
808 msgs := {
809 cc := {
810 connect_MS_NW := {
811 messageType := '000111'B,
812 nsd := '00'B,
813 facility := omit,
814 connectedSubAddress := omit,
815 user_user := omit,
816 ss_VersionIndicator := omit,
817 streamIdentifier := omit
818 }
819 }
820 }
821}
822
Harald Welte4017d552018-01-26 21:40:05 +0100823template PDU_ML3_NW_MS tr_ML3_MT_CC_CONNECT(integer tid) := {
824 discriminator := '0011'B,
825 tiOrSkip := {
826 transactionId := {
827 tio := int2bit(tid, 3),
828 tiFlag := '1'B,
829 tIExtension := omit
830 }
831 },
832 msgs := {
833 cc := {
834 connect_NW_MS := {
835 messageType := '000111'B,
836 nsd := '00'B,
837 facility := *,
838 progressIndicator := *,
839 connectedNumber := *,
840 connectedSubAddress := *,
841 user_user := *
842 }
843 }
844 }
845}
846
847template (value) PDU_ML3_MS_NW ts_ML3_MO_CC_CONNECT_ACK(integer tid) := {
848 discriminator := '0011'B,
849 tiOrSkip := {
850 transactionId := {
851 tio := int2bit(tid, 3),
852 tiFlag := '0'B,
853 tIExtension := omit
854 }
855 },
856 msgs := {
857 cc := {
858 connectAck := {
859 messageType := '001111'B,
860 nsd := '00'B
861 }
862 }
863 }
864}
865
Harald Welte2bb825f2018-01-22 11:31:18 +0100866template PDU_ML3_NW_MS tr_ML3_MT_CC_DISC(integer tid) := {
867 discriminator := '0011'B,
868 tiOrSkip := {
869 transactionId := {
870 tio := int2bit(tid, 3),
871 tiFlag := ?,
872 tIExtension := omit
873 }
874 },
875 msgs := {
876 cc := {
877 disconnect_NW_MS := {
878 messageType := '100101'B,
879 nsd := '00'B,
880 cause := ?,
881 facility := *,
882 progressIndicator := *,
883 user_user := *,
884 allowedActions := *
885 }
886 }
887 }
888}
889
890template PDU_ML3_NW_MS tr_ML3_MT_CC_RELEASE(integer tid) := {
891 discriminator := '0011'B,
892 tiOrSkip := {
893 transactionId := {
894 tio := int2bit(tid, 3),
895 tiFlag := ?,
896 tIExtension := omit
897 }
898 },
899 msgs := {
900 cc := {
901 release_NW_MS := {
902 messageType := '101101'B,
903 nsd := '00'B,
904 cause := ?,
905 secondCause := *,
906 facility := *,
907 user_user := *
908 }
909 }
910 }
911}
Harald Welted748a052018-01-22 02:59:24 +0100912
Harald Welte33ec09b2018-02-10 15:34:46 +0100913template PDU_ML3_MS_NW ts_ML3_MO_CC_RELEASE(integer tid, BIT1 tid_remote, BIT7 cause) := {
914 discriminator := '0011'B,
915 tiOrSkip := {
916 transactionId := {
917 tio := int2bit(tid, 3),
918 tiFlag := tid_remote,
919 tIExtension := omit
920 }
921 },
922 msgs := {
923 cc := {
924 release_MS_NW := {
925 messageType := '101101'B,
926 nsd := '00'B,
927 cause := ts_ML3_Cause(cause),
928 secondCause := omit,
929 facility := omit,
930 user_user := omit,
931 ss_VersionIndicator := omit
932 }
933 }
934 }
935}
936
937
Harald Welteb71901a2018-01-26 19:16:05 +0100938template (value) PDU_ML3_MS_NW ts_ML3_MO_CC_REL_COMPL(integer tid) := {
939 discriminator := '0011'B,
940 tiOrSkip := {
941 transactionId := {
942 tio := int2bit(tid, 3),
943 tiFlag := '0'B,
944 tIExtension := omit
945 }
946 },
947 msgs := {
948 cc := {
949 releaseComplete_MS_NW := {
950 messageType := '101010'B,
951 nsd := '00'B,
952 cause := omit,
953 facility := omit,
954 user_user := omit,
955 ss_VersionIndicator := omit
956 }
957 }
958 }
959}
960
Harald Welte33ec09b2018-02-10 15:34:46 +0100961template PDU_ML3_NW_MS tr_ML3_MT_CC_REL_COMPL(integer tid) := {
962 discriminator := '0011'B,
963 tiOrSkip := {
964 transactionId := {
965 tio := int2bit(tid, 3),
966 tiFlag := ?,
967 tIExtension := omit
968 }
969 },
970 msgs := {
971 cc := {
972 releaseComplete_NW_MS := {
973 messageType := '101010'B,
974 nsd := '00'B,
975 cause := *,
976 facility := *,
977 user_user := *
978 }
979 }
980 }
981}
982
983
Harald Welteb71901a2018-01-26 19:16:05 +0100984
Harald Welte77a8eba2018-01-22 21:22:32 +0100985template PDU_ML3_NW_MS tr_ML3_MT_MM_AUTH_REQ(template OCT16 rand := ?) := {
986 discriminator := '0101'B,
987 tiOrSkip := {
988 skipIndicator := '0000'B
989 },
990 msgs := {
991 mm := {
992 authenticationRequest := {
993 messageType := '010010'B,
994 nsd := '00'B,
995 cipheringKeySequenceNumber := ?,
996 spare2_4 := ?,
997 authenticationParRAND := rand,
998 authenticationParAUTN := *
999 }
1000 }
1001 }
1002}
1003
1004template (value) PDU_ML3_MS_NW ts_ML3_MT_MM_AUTH_RESP_2G(OCT4 sres) := {
1005 discriminator := '0101'B,
1006 tiOrSkip := {
1007 skipIndicator := '0000'B
1008 },
1009 msgs := {
1010 mm := {
1011 authenticationResponse := {
1012 messageType := '010100'B,
1013 nsd := '00'B,
1014 authenticationParSRES := sres,
1015 authenticationParSRESext := omit
1016 }
1017 }
1018 }
1019}
1020
1021template (value) PDU_ML3_MS_NW ts_ML3_MT_MM_AUTH_RESP_3G(OCT4 sres, octetstring res) := {
1022 discriminator := '0101'B,
1023 tiOrSkip := {
1024 skipIndicator := '0000'B
1025 },
1026 msgs := {
1027 mm := {
1028 authenticationResponse := {
1029 messageType := '010100'B,
1030 nsd := '00'B,
1031 authenticationParSRES := sres,
1032 authenticationParSRESext := {
1033 elementIdentifier := '21'O,
1034 lengthIndicator := 0, /* overwritten */
1035 valueField := res
1036 }
1037 }
1038 }
1039 }
1040}
Harald Weltecb6cc332018-01-21 13:59:08 +01001041
Harald Welte812f7a42018-01-27 00:49:18 +01001042template PDU_ML3_MS_NW ts_ML3_MO_CC_CALL_CONF(integer tid,
1043 template BearerCapability_TLV bcap := omit) := {
1044 discriminator := '0011'B,
1045 tiOrSkip := {
1046 transactionId := {
1047 tio := int2bit(tid, 3),
1048 tiFlag := '1'B, /* response from destination */
1049 tIExtension := omit
1050 }
1051 },
1052 msgs := {
1053 cc := {
1054 callConfirmed := {
1055 messageType := '001000'B,
1056 nsd := '00'B,
1057 repeatIndicator := omit,
1058 bearerCapability1 := bcap,
1059 bearerCapability2 := omit,
1060 cause := omit,
1061 cC_Capabilities := omit,
1062 streamIdentifier := omit,
1063 supportedCodecs := omit
1064 }
1065 }
1066 }
1067}
1068
1069
1070template PDU_ML3_NW_MS tr_ML3_MT_CC_SETUP(integer tid, template hexstring called := *,
1071 template hexstring calling := *,
1072 template BearerCapability_TLV bcap := *) := {
1073 discriminator := '0011'B,
1074 tiOrSkip := {
1075 transactionId := {
1076 tio := int2bit(tid, 3),
1077 tiFlag := '0'B, /* from originator */
1078 tIExtension := omit
1079 }
1080 },
1081 msgs := {
1082 cc := {
1083 setup_NW_MS := {
1084 messageType := '000101'B,
1085 nsd := '00'B,
1086 bcRepeatIndicator := *,
1087 bearerCapability1 := bcap,
1088 bearerCapability2 := *,
1089 facility := *,
1090 progressIndicator := *,
1091 signal := *,
1092 callingPartyBCD_Number := tr_Calling(calling) ifpresent,
1093 callingPartySubAddress := *,
1094 calledPartyBCD_Number := tr_Called(called) ifpresent,
1095 calledPartySubAddress := *,
1096 redirectingPartyBCDNumber := *,
1097 redirectingPartySubaddress := *,
1098 llc_RepeatIndicator := *,
1099 lowLayerCompatibility1 := *,
1100 lowLayerCompatibility2 := *,
1101 hlc_RepeatIndicator := *,
1102 highLayerCompatibility1 := *,
1103 highLayerCompatibility2 := *,
1104 user_user := *,
1105 priority := *,
1106 alert := *,
1107 networkCCCapabilities := *,
1108 causeofNoCli := *,
1109 backupBearerCapacity := *
1110 }
1111 }
1112 }
1113}
1114
1115
Harald Weltecb6cc332018-01-21 13:59:08 +01001116
Harald Weltec76f29f2017-11-22 12:46:46 +01001117}