blob: df4ea03f841edc8011cf9d96059f1f6ca5bab330 [file] [log] [blame]
Harald Weltea013e682018-06-18 19:49:39 +02001module RANAP_Templates {
2
3import from General_Types all;
4
5import from RANAP_IEs all;
6import from RANAP_CommonDataTypes all;
7import from RANAP_Constants all;
8import from RANAP_Containers all;
9import from RANAP_PDU_Contents all;
10import from RANAP_PDU_Descriptions all;
11
12template (value) Cause ts_RanapCause_om_intervention := { misc := 113 };
13
14/*****************************************************************************************************
15 * Reset
16 *****************************************************************************************************/
17
18template (value) RANAP_PDU
19ts_RANAP_Reset(template (value) Cause cause, template (value) CN_DomainIndicator dom,
20 template (omit) Reset.protocolExtensions exts := omit) := {
21 initiatingMessage := {
22 procedureCode := id_Reset,
23 criticality := reject,
24 value_ := {
25 Reset := {
26 protocolIEs := {
27 {
28 id := id_Cause,
29 criticality := ignore,
30 value_ := {
31 cause := cause
32 }
33 }, {
34 id := id_CN_DomainIndicator,
35 criticality := reject,
36 value_ := {
37 cN_DomainIndicator := dom
38 }
39 }
40 },
41 protocolExtensions := exts
42 }
43 }
44 }
45}
46template RANAP_PDU
47tr_RANAP_Reset(template Cause cause := ?, template CN_DomainIndicator dom := ?,
48 template Reset.protocolExtensions exts := *) := {
49 initiatingMessage := {
50 procedureCode := id_Reset,
51 criticality := reject,
52 value_ := {
53 Reset := {
54 protocolIEs := {
55 {
56 id := id_Cause,
57 criticality := ignore,
58 value_ := {
59 cause := cause
60 }
61 }, {
62 id := id_CN_DomainIndicator,
63 criticality := reject,
64 value_ := {
65 cN_DomainIndicator := dom
66 }
67 }, *
68 },
69 protocolExtensions := exts
70 }
71 }
72 }
73}
74
75template (value) RANAP_PDU
76ts_RANAP_ResetAck(template (value) CN_DomainIndicator dom,
77 template (omit) ResetAcknowledge.protocolExtensions exts := omit) := {
78 successfulOutcome := {
79 procedureCode := id_Reset,
80 criticality := reject,
81 value_ := {
82 ResetAcknowledge := {
83 protocolIEs := {
84 {
85 id := id_CN_DomainIndicator,
86 criticality := reject,
87 value_ := {
88 cN_DomainIndicator := dom
89 }
90 }
91 },
92 protocolExtensions := exts
93 }
94 }
95 }
96}
97template RANAP_PDU
98tr_RANAP_ResetAck(template CN_DomainIndicator dom := ?,
99 template ResetAcknowledge.protocolExtensions exts := *) := {
100 successfulOutcome := {
101 procedureCode := id_Reset,
102 criticality := reject,
103 value_ := {
104 ResetAcknowledge := {
105 protocolIEs := {
106 {
107 id := id_CN_DomainIndicator,
108 criticality := reject,
109 value_ := {
110 cN_DomainIndicator := dom
111 }
112 }, *
113 },
114 protocolExtensions := exts
115 }
116 }
117 }
118}
119
120/*****************************************************************************************************
121 * Security Mode Control
122 *****************************************************************************************************/
123
124template (value) RANAP_PDU
125ts_RANAP_SecurityModeCmd(template (value) PermittedIntegrityProtectionAlgorithms uia_algs,
126 template (value) IntegrityProtectionKey uia_key,
127 template (value) KeyStatus key_sts,
128 template (omit) SecurityModeCommand.protocolExtensions exts := omit) := {
129 initiatingMessage := {
130 procedureCode := id_SecurityModeControl,
131 criticality := reject,
132 value_ := {
133 securityModeCommand := {
134 protocolIEs := {
135 {
136 id := id_IntegrityProtectionInformation,
137 criticality := reject,
138 value_ := {
139 integrityProtectionInformation := {
140 permittedAlgorithms := uia_algs,
141 key := uia_key,
142 iE_Extensions := omit
143 }
144 }
145 }, {
146 id := id_KeyStatus,
147 criticality := reject,
148 value_ := {
149 keyStatus := key_sts
150 }
151 }
152 },
153 protocolExtensions := exts
154 }
155 }
156 }
157}
158template RANAP_PDU
159tr_RANAP_SecurityModeCmd(template PermittedIntegrityProtectionAlgorithms uia_algs,
160 template IntegrityProtectionKey uia_key,
161 template KeyStatus key_sts,
162 template SecurityModeCommand.protocolExtensions exts := *) := {
163 initiatingMessage := {
164 procedureCode := id_SecurityModeControl,
165 criticality := reject,
166 value_ := {
167 securityModeCommand := {
168 protocolIEs := {
169 {
170 id := id_IntegrityProtectionInformation,
171 criticality := reject,
172 value_ := {
173 integrityProtectionInformation := {
174 permittedAlgorithms := uia_algs,
175 key := uia_key,
176 iE_Extensions := *
177 }
178 }
179 }, {
180 id := id_KeyStatus,
181 criticality := reject,
182 value_ := {
183 keyStatus := key_sts
184 }
185 }
186 },
187 protocolExtensions := exts
188 }
189 }
190 }
191}
192
193template (value) RANAP_PDU
194ts_RANAP_SecurityModeCmdEnc(template (value) PermittedIntegrityProtectionAlgorithms uia_algs,
195 template (value) IntegrityProtectionKey uia_key,
196 template (value) KeyStatus key_sts,
197 template (value) PermittedEncryptionAlgorithms uea_algs,
198 template (value) EncryptionKey uea_key,
199 template (omit) SecurityModeCommand.protocolExtensions exts := omit) := {
200 initiatingMessage := {
201 procedureCode := id_SecurityModeControl,
202 criticality := reject,
203 value_ := {
204 securityModeCommand := {
205 protocolIEs := {
206 {
207 id := id_IntegrityProtectionInformation,
208 criticality := reject,
209 value_ := {
210 integrityProtectionInformation := {
211 permittedAlgorithms := uia_algs,
212 key := uia_key,
213 iE_Extensions := omit
214 }
215 }
216 }, {
217 id := id_EncryptionInformation,
218 criticality := ignore,
219 value_ := {
220 encryptionInformation := {
221 permittedAlgorithms := uea_algs,
222 key := uea_key,
223 iE_Extensions := omit
224 }
225 }
226 }, {
227 id := id_KeyStatus,
228 criticality := reject,
229 value_ := {
230 keyStatus := key_sts
231 }
232 }
233 },
234 protocolExtensions := exts
235 }
236 }
237 }
238}
239template RANAP_PDU
240tr_RANAP_SecurityModeCmdEnc(template PermittedIntegrityProtectionAlgorithms uia_algs,
241 template IntegrityProtectionKey uia_key,
242 template KeyStatus key_sts,
243 template PermittedEncryptionAlgorithms uea_algs,
244 template EncryptionKey uea_key,
245 template SecurityModeCommand.protocolExtensions exts := *) := {
246 initiatingMessage := {
247 procedureCode := id_SecurityModeControl,
248 criticality := reject,
249 value_ := {
250 securityModeCommand := {
251 protocolIEs := {
252 {
253 id := id_IntegrityProtectionInformation,
254 criticality := reject,
255 value_ := {
256 integrityProtectionInformation := {
257 permittedAlgorithms := uia_algs,
258 key := uia_key,
259 iE_Extensions := *
260 }
261 }
262 }, {
263 id := id_EncryptionInformation,
264 criticality := ignore,
265 value_ := {
266 encryptionInformation := {
267 permittedAlgorithms := uea_algs,
268 key := uea_key,
269 iE_Extensions := *
270 }
271 }
272 }, {
273 id := id_KeyStatus,
274 criticality := reject,
275 value_ := {
276 keyStatus := key_sts
277 }
278 }
279 },
280 protocolExtensions := exts
281 }
282 }
283 }
284}
285
286template (value) RANAP_PDU
287ts_RANAP_SecurityModeComplete(template (value) IntegrityProtectionAlgorithm uia_alg,
288 template (omit) SecurityModeComplete.protocolExtensions exts := omit) := {
289 successfulOutcome := {
290 procedureCode := id_SecurityModeControl,
291 criticality := reject,
292 value_ := {
293 securityModeComplete := {
294 protocolIEs := {
295 {
296 id := id_ChosenIntegrityProtectionAlgorithm,
297 criticality := reject,
298 value_ := {
299 chosenIntegrityProtectionAlgorithm := uia_alg
300 }
301 }
302 },
303 protocolExtensions := exts
304 }
305 }
306 }
307}
308template RANAP_PDU
309tr_RANAP_SecurityModeComplete(template IntegrityProtectionAlgorithm uia_alg,
310 template SecurityModeComplete.protocolExtensions exts := *) := {
311 successfulOutcome := {
312 procedureCode := id_SecurityModeControl,
313 criticality := reject,
314 value_ := {
315 securityModeComplete := {
316 protocolIEs := {
317 {
318 id := id_ChosenIntegrityProtectionAlgorithm,
319 criticality := reject,
320 value_ := {
321 chosenIntegrityProtectionAlgorithm := uia_alg
322 }
323 }
324 },
325 protocolExtensions := exts
326 }
327 }
328 }
329}
330
331template (value) RANAP_PDU
332ts_RANAP_SecurityModeCompleteEnc(template (value) IntegrityProtectionAlgorithm uia_alg,
333 template (value) EncryptionAlgorithm uea_alg,
334 template (omit) SecurityModeComplete.protocolExtensions exts := omit) := {
335 successfulOutcome := {
336 procedureCode := id_SecurityModeControl,
337 criticality := reject,
338 value_ := {
339 securityModeComplete := {
340 protocolIEs := {
341 {
342 id := id_ChosenIntegrityProtectionAlgorithm,
343 criticality := reject,
344 value_ := {
345 chosenIntegrityProtectionAlgorithm := uia_alg
346 }
347 }, {
348 id := id_ChosenEncryptionAlgorithm,
349 criticality := ignore,
350 value_ := {
351 chosenEncryptionAlgorithm := uea_alg
352 }
353 }
354 },
355 protocolExtensions := exts
356 }
357 }
358 }
359}
360template RANAP_PDU
361tr_RANAP_SecurityModeCompleteEnc(template IntegrityProtectionAlgorithm uia_alg,
362 template EncryptionAlgorithm uea_alg,
363 template SecurityModeComplete.protocolExtensions exts := *) := {
364 successfulOutcome := {
365 procedureCode := id_SecurityModeControl,
366 criticality := reject,
367 value_ := {
368 securityModeComplete := {
369 protocolIEs := {
370 {
371 id := id_ChosenIntegrityProtectionAlgorithm,
372 criticality := reject,
373 value_ := {
374 chosenIntegrityProtectionAlgorithm := uia_alg
375 }
376 }, {
377 id := id_ChosenEncryptionAlgorithm,
378 criticality := ignore,
379 value_ := {
380 chosenEncryptionAlgorithm := uea_alg
381 }
382 }
383 },
384 protocolExtensions := exts
385 }
386 }
387 }
388}
389
390template (value) RANAP_PDU
391ts_RANAP_SecurityModeReject(template (value) Cause cause,
392 template (omit) SecurityModeReject.protocolExtensions exts := omit) := {
393 unsuccessfulOutcome := {
394 procedureCode := id_SecurityModeControl,
395 criticality := reject,
396 value_ := {
397 securityModeReject := {
398 protocolIEs := {
399 {
400 id := id_Cause,
401 criticality := ignore,
402 value_ := {
403 cause := cause
404 }
405 }
406 },
407 protocolExtensions := exts
408 }
409 }
410 }
411}
412template RANAP_PDU
413tr_RANAP_SecurityModeReject(template Cause cause,
414 template SecurityModeReject.protocolExtensions exts := *) := {
415 unsuccessfulOutcome := {
416 procedureCode := id_SecurityModeControl,
417 criticality := reject,
418 value_ := {
419 securityModeReject := {
420 protocolIEs := {
421 {
422 id := id_Cause,
423 criticality := ignore,
424 value_ := {
425 cause := cause
426 }
427 }
428 },
429 protocolExtensions := exts
430 }
431 }
432 }
433}
434
435
436
437/*****************************************************************************************************
438 * Iu Release Request
439 *****************************************************************************************************/
440
441template (value) RANAP_PDU
442ts_RANAP_IuReleaseRequest(template (value) Cause cause,
443 template (omit) Iu_ReleaseRequest.protocolExtensions exts := omit) := {
444 initiatingMessage := {
445 procedureCode := id_Iu_ReleaseRequest,
446 criticality := ignore,
447 value_ := {
448 iu_ReleaseRequest := {
449 protocolIEs := {
450 {
451 id := id_Cause,
452 criticality := reject,
453 value_ := {
454 cause := cause
455 }
456 }
457 },
458 protocolExtensions := exts
459 }
460 }
461 }
462}
463template RANAP_PDU
464tr_RANAP_IuReleaseRequest(template Cause cause,
465 template Iu_ReleaseRequest.protocolExtensions exts := *) := {
466 initiatingMessage := {
467 procedureCode := id_Iu_ReleaseRequest,
468 criticality := ignore,
469 value_ := {
470 iu_ReleaseRequest := {
471 protocolIEs := {
472 {
473 id := id_Cause,
474 criticality := reject,
475 value_ := {
476 cause := cause
477 }
478 }
479 },
480 protocolExtensions := exts
481 }
482 }
483 }
484}
485
486/*****************************************************************************************************
487 * RAB Release
488 *****************************************************************************************************/
489
490template (value) RANAP_PDU
491ts_RANAP_RabReleaseRequest(template (value) RAB_ID rab_id, template (value) Cause cause,
492 template (omit) RAB_ReleaseRequest.protocolExtensions exts := omit) := {
493 initiatingMessage := {
494 procedureCode := id_RAB_ReleaseRequest,
495 criticality := ignore,
496 value_ := {
497 rAB_ReleaseRequest := {
498 protocolIEs := {
499 {
500 id := id_RAB_ReleaseList,
501 criticality := ignore,
502 value_ := {
503 rAB_ReleaseList := {{
504 {
505 id := id_RAB_ReleaseItem,
506 criticality := ignore,
507 value_ := {
508 rAB_ReleaseItem := {
509 rAB_ID := rab_id,
510 cause := cause,
511 iE_Extensions := omit
512 }
513 }
514 }
515 }}
516 }
517 }
518 },
519 protocolExtensions := exts
520 }
521 }
522 }
523}
524template RANAP_PDU
525tr_RANAP_RabReleaseRequest(template RAB_ID rab_id, template Cause cause,
526 template RAB_ReleaseRequest.protocolExtensions exts := *) := {
527 initiatingMessage := {
528 procedureCode := id_RAB_ReleaseRequest,
529 criticality := ignore,
530 value_ := {
531 rAB_ReleaseRequest := {
532 protocolIEs := {
533 {
534 id := id_RAB_ReleaseList,
535 criticality := ignore,
536 value_ := {
537 rAB_ReleaseList := {{
538 {
539 id := id_RAB_ReleaseItem,
540 criticality := ignore,
541 value_ := {
542 rAB_ReleaseItem := {
543 rAB_ID := rab_id,
544 cause := cause,
545 iE_Extensions := *
546 }
547 }
548 }
549 }}
550 }
551 }
552 },
553 protocolExtensions := exts
554 }
555 }
556 }
557}
558
559
560/*****************************************************************************************************
561 * Iu Release
562 *****************************************************************************************************/
563
564template (value) RANAP_PDU
565ts_RANAP_IuReleaseCommand(template (value) Cause cause,
566 template (omit) Iu_ReleaseCommand.protocolExtensions exts := omit) := {
567 initiatingMessage := {
568 procedureCode := id_Iu_Release,
569 criticality := reject,
570 value_ := {
571 iu_ReleaseCommand := {
572 protocolIEs := {
573 {
574 id := id_Cause,
575 criticality := ignore,
576 value_ := {
577 cause := cause
578 }
579 }
580 },
581 protocolExtensions := exts
582 }
583 }
584 }
585}
586template RANAP_PDU
587tr_RANAP_IuReleaseCommand(template Cause cause,
588 template Iu_ReleaseCommand.protocolExtensions exts := *) := {
589 initiatingMessage := {
590 procedureCode := id_Iu_Release,
591 criticality := reject,
592 value_ := {
593 iu_ReleaseCommand := {
594 protocolIEs := {
595 {
596 id := id_Cause,
597 criticality := ignore,
598 value_ := {
599 cause := cause
600 }
601 }
602 },
603 protocolExtensions := exts
604 }
605 }
606 }
607}
608
609template (value) RANAP_PDU
610ts_RANAP_IuReleaseComplete(template (omit) Iu_ReleaseComplete.protocolIEs ies := {},
611 template (omit) Iu_ReleaseComplete.protocolExtensions exts := omit) := {
612 successfulOutcome := {
613 procedureCode := id_Iu_Release,
614 criticality := reject,
615 value_ := {
616 iu_ReleaseComplete := {
617 protocolIEs := ies,
618 protocolExtensions := exts
619 }
620 }
621 }
622}
623template RANAP_PDU
624tr_RANAP_IuReleaseComplete(template Iu_ReleaseComplete.protocolIEs ies := *,
625 template Iu_ReleaseComplete.protocolExtensions exts := *) := {
626 successfulOutcome := {
627 procedureCode := id_Iu_Release,
628 criticality := reject,
629 value_ := {
630 iu_ReleaseComplete:= {
631 protocolIEs := ies,
632 protocolExtensions := exts
633 }
634 }
635 }
636}
637
638/*****************************************************************************************************
639 * Paging
640 *****************************************************************************************************/
641
642template (value) RANAP_PDU
643ts_RANAP_Paging(template (value) CN_DomainIndicator dom, template (value) IMSI imsi,
644 template (omit) TemporaryUE_ID temp_id := omit,
645 template (omit) Paging.protocolExtensions exts := omit) := {
646 initiatingMessage := {
647 procedureCode := id_Paging,
648 criticality := ignore,
649 value_ := {
650 paging := {
651 protocolIEs := {
652 {
653 id := id_CN_DomainIndicator,
654 criticality := ignore,
655 value_ := {
656 cN_DomainIndicator := dom
657 }
658 }, {
659 id := id_PermanentNAS_UE_ID,
660 criticality := ignore,
661 value_ := {
662 permanentNAS_UE_ID := {
663 iMSI := imsi
664 }
665 }
666 }
667 },
668 protocolExtensions := exts
669 }
670 }
671 }
672}
673template RANAP_PDU
674tr_RANAP_Paging(template CN_DomainIndicator dom, template IMSI imsi,
675 template Paging.protocolExtensions exts := *) := {
676 initiatingMessage := {
677 procedureCode := id_Paging,
678 criticality := ignore,
679 value_ := {
680 paging := {
681 protocolIEs := {
682 {
683 id := id_CN_DomainIndicator,
684 criticality := ignore,
685 value_ := {
686 cN_DomainIndicator := dom
687 }
688 }, {
689 id := id_PermanentNAS_UE_ID,
690 criticality := ignore,
691 value_ := {
692 permanentNAS_UE_ID := {
693 iMSI := imsi
694 }
695 }
696 }, *
697 },
698 protocolExtensions := exts
699 }
700 }
701 }
702}
703
704
705
706/*****************************************************************************************************
707 * Common ID
708 *****************************************************************************************************/
709
710template (value) RANAP_PDU
711ts_RANAP_CommonId(template (value) IMSI imsi,
712 template (omit) CommonID.protocolExtensions exts := omit) := {
713 initiatingMessage := {
714 procedureCode := id_CommonID,
715 criticality := ignore,
716 value_ := {
717 commonID := {
718 protocolIEs := {
719 {
720 id := id_PermanentNAS_UE_ID,
721 criticality := ignore,
722 value_ := {
723 permanentNAS_UE_ID := {
724 iMSI := imsi
725 }
726 }
727 }
728 },
729 protocolExtensions := exts
730 }
731 }
732 }
733}
734template RANAP_PDU
735tr_RANAP_CommonId(template IMSI imsi,
736 template CommonID.protocolExtensions exts := *) := {
737 initiatingMessage := {
738 procedureCode := id_CommonID,
739 criticality := ignore,
740 value_ := {
741 commonID := {
742 protocolIEs := {
743 {
744 id := id_PermanentNAS_UE_ID,
745 criticality := ignore,
746 value_ := {
747 permanentNAS_UE_ID := {
748 iMSI := imsi
749 }
750 }
751 }
752 },
753 protocolExtensions := exts
754 }
755 }
756 }
757}
758
759/*****************************************************************************************************
760 * Initial UE Message
761 *****************************************************************************************************/
762
763template (value) RANAP_PDU
764ts_RANAP_initialUE_CS(template (value) LAI lai, template (value) SAI sai,
765 template (value) NAS_PDU nas,
766 template (value) IuSignallingConnectionIdentifier sigc_id,
767 template (value) GlobalRNC_ID grnc_id,
768 template (omit) InitialUE_Message.protocolExtensions exts := omit) := {
769 initiatingMessage := {
770 procedureCode := id_InitialUE_Message,
771 criticality := ignore,
772 value_ := {
773 initialUE_Message := {
774 protocolIEs := {
775 {
776 id := id_CN_DomainIndicator,
777 criticality := ignore,
778 value_ := {
779 cN_DomainIndicator := cs_domain
780 }
781 }, {
782 id := id_LAI,
783 criticality := ignore,
784 value_ := {
785 lAI := lai
786 }
787 }, {
788 id := id_SAI,
789 criticality := ignore,
790 value_ := {
791 sAI := sai
792 }
793 }, {
794 id := id_NAS_PDU,
795 criticality := ignore,
796 value_ := {
797 nAS_PDU := nas
798 }
799 }, {
800 id := id_IuSigConId,
801 criticality := ignore,
802 value_ := {
803 iuSignallingConnectionIdentifier := sigc_id
804 }
805 }, {
806 id := id_GlobalRNC_ID,
807 criticality := ignore,
808 value_ := {
809 globalRNC_ID := grnc_id
810 }
811 }
812 },
813 protocolExtensions := exts
814 }
815 }
816 }
817}
818template RANAP_PDU
819tr_RANAP_initialUE_CS(template LAI lai, template SAI sai,
820 template NAS_PDU nas,
821 template IuSignallingConnectionIdentifier sigc_id,
822 template GlobalRNC_ID grnc_id,
823 template InitialUE_Message.protocolExtensions exts := *) := {
824 initiatingMessage := {
825 procedureCode := id_InitialUE_Message,
826 criticality := ignore,
827 value_ := {
828 initialUE_Message := {
829 protocolIEs := {
830 {
831 id := id_CN_DomainIndicator,
832 criticality := ignore,
833 value_ := {
834 cN_DomainIndicator := cs_domain
835 }
836 }, {
837 id := id_LAI,
838 criticality := ignore,
839 value_ := {
840 lAI := lai
841 }
842 }, {
843 id := id_SAI,
844 criticality := ignore,
845 value_ := {
846 sAI := sai
847 }
848 }, {
849 id := id_NAS_PDU,
850 criticality := ignore,
851 value_ := {
852 nAS_PDU := nas
853 }
854 }, {
855 id := id_IuSigConId,
856 criticality := ignore,
857 value_ := {
858 iuSignallingConnectionIdentifier := sigc_id
859 }
860 }, {
861 id := id_GlobalRNC_ID,
862 criticality := ignore,
863 value_ := {
864 globalRNC_ID := grnc_id
865 }
866 }
867 },
868 protocolExtensions := exts
869 }
870 }
871 }
872}
873
874template (value) RANAP_PDU
875ts_RANAP_initialUE_PS(template (value) LAI lai, template (value) RAC rac, template (value) SAI sai,
876 template (value) NAS_PDU nas,
877 template (value) IuSignallingConnectionIdentifier sigc_id,
878 template (value) GlobalRNC_ID grnc_id,
879 template (omit) InitialUE_Message.protocolExtensions exts := omit) := {
880 initiatingMessage := {
881 procedureCode := id_InitialUE_Message,
882 criticality := ignore,
883 value_ := {
884 initialUE_Message := {
885 protocolIEs := {
886 {
887 id := id_CN_DomainIndicator,
888 criticality := ignore,
889 value_ := {
890 cN_DomainIndicator := ps_domain
891 }
892 }, {
893 id := id_LAI,
894 criticality := ignore,
895 value_ := {
896 lAI := lai
897 }
898 }, {
899 id := id_RAC,
900 criticality := ignore,
901 value_ := {
902 rAC := rac
903 }
904 }, {
905 id := id_SAI,
906 criticality := ignore,
907 value_ := {
908 sAI := sai
909 }
910 }, {
911 id := id_NAS_PDU,
912 criticality := ignore,
913 value_ := {
914 nAS_PDU := nas
915 }
916 }, {
917 id := id_IuSigConId,
918 criticality := ignore,
919 value_ := {
920 iuSignallingConnectionIdentifier := sigc_id
921 }
922 }, {
923 id := id_GlobalRNC_ID,
924 criticality := ignore,
925 value_ := {
926 globalRNC_ID := grnc_id
927 }
928 }
929 },
930 protocolExtensions := exts
931 }
932 }
933 }
934}
935template RANAP_PDU
936tr_RANAP_initialUE_PS(template LAI lai, template RAC rac, template SAI sai,
937 template NAS_PDU nas,
938 template IuSignallingConnectionIdentifier sigc_id,
939 template GlobalRNC_ID grnc_id,
940 template InitialUE_Message.protocolExtensions exts := *) := {
941 initiatingMessage := {
942 procedureCode := id_InitialUE_Message,
943 criticality := ignore,
944 value_ := {
945 initialUE_Message := {
946 protocolIEs := {
947 {
948 id := id_CN_DomainIndicator,
949 criticality := ignore,
950 value_ := {
951 cN_DomainIndicator := ps_domain
952 }
953 }, {
954 id := id_LAI,
955 criticality := ignore,
956 value_ := {
957 lAI := lai
958 }
959 }, {
960 id := id_RAC,
961 criticality := ignore,
962 value_ := {
963 rAC := rac
964 }
965 }, {
966 id := id_SAI,
967 criticality := ignore,
968 value_ := {
969 sAI := sai
970 }
971 }, {
972 id := id_NAS_PDU,
973 criticality := ignore,
974 value_ := {
975 nAS_PDU := nas
976 }
977 }, {
978 id := id_IuSigConId,
979 criticality := ignore,
980 value_ := {
981 iuSignallingConnectionIdentifier := sigc_id
982 }
983 }, {
984 id := id_GlobalRNC_ID,
985 criticality := ignore,
986 value_ := {
987 globalRNC_ID := grnc_id
988 }
989 }
990 },
991 protocolExtensions := exts
992 }
993 }
994 }
995}
996
997/*****************************************************************************************************
998 * Direct Transfer
999 *****************************************************************************************************/
1000
Vadim Yanitskiye06f2282019-06-20 05:02:49 +07001001private function f_gen_ts_dt_ies(template (value) NAS_PDU nas,
1002 template (omit) SAPI sapi,
1003 template (value) DirectTransfer.protocolIEs opt_ies)
1004return DirectTransfer.protocolIEs {
1005 var DirectTransfer.protocolIEs ies := {
1006 /* NAS PDU is mandatory */
1007 {
1008 id := id_NAS_PDU,
1009 criticality := ignore,
1010 value_ := {
1011 nAS_PDU := valueof(nas)
1012 }
1013 }
1014 };
1015
1016 /* Optional IEs, e.g. LAI, RAC, SAI */
1017 ies := ies & valueof(opt_ies);
1018
1019 /* Optional SAPI is the last IE */
1020 if (isvalue(sapi)) {
1021 ies := ies & {{
1022 id := id_SAPI,
1023 criticality := ignore,
1024 value_ := {
1025 sAPI := valueof(sapi)
1026 }
1027 }};
1028 }
1029
1030 return ies;
1031}
1032
1033private function f_gen_tr_dt_ies(template NAS_PDU nas,
1034 template SAPI sapi,
1035 template DirectTransfer.protocolIEs opt_ies)
1036return template DirectTransfer.protocolIEs {
1037 var template DirectTransfer.protocolIEs ies := {
1038 /* NAS PDU is mandatory */
1039 {
1040 id := id_NAS_PDU,
1041 criticality := ignore,
1042 value_ := {
1043 nAS_PDU := nas
1044 }
1045 }
1046 };
1047
1048 /* Optional IEs start from index 1 */
1049 var integer idx := 1;
1050
1051 /* Optional IEs, e.g. LAI, RAC, SAI */
1052 if (istemplatekind(opt_ies, "*")) {
1053 ies[idx] := *;
1054 idx := idx + 1;
1055 } else if (not istemplatekind(opt_ies, "omit")) {
1056 for (var integer i := 0; i < lengthof(opt_ies); i := i + 1) {
1057 ies[idx] := opt_ies[idx];
1058 idx := idx + 1;
1059 }
1060 }
1061
1062 /* Optional SAPI is the last IE */
1063 if (istemplatekind(sapi, "*")) {
1064 ies[idx] := *;
1065 } else if (not istemplatekind(sapi, "omit")) {
1066 ies[idx] := {
1067 id := id_SAPI,
1068 criticality := ignore,
1069 value_ := {
1070 sAPI := sapi
1071 }
1072 };
1073 }
1074
1075 return ies;
1076}
1077
Harald Weltea013e682018-06-18 19:49:39 +02001078template (value) RANAP_PDU
1079ts_RANAP_DirectTransfer(template (value) NAS_PDU nas,
Vadim Yanitskiye06f2282019-06-20 05:02:49 +07001080 template (omit) SAPI sapi := omit,
1081 template (value) DirectTransfer.protocolIEs ies := {},
Harald Weltea013e682018-06-18 19:49:39 +02001082 template (omit) DirectTransfer.protocolExtensions exts := omit) := {
1083 initiatingMessage := {
1084 procedureCode := id_DirectTransfer,
1085 criticality := ignore,
1086 value_ := {
1087 directTransfer := {
Vadim Yanitskiye06f2282019-06-20 05:02:49 +07001088 protocolIEs := f_gen_ts_dt_ies(nas, sapi, ies),
Harald Weltea013e682018-06-18 19:49:39 +02001089 protocolExtensions := exts
1090 }
1091 }
1092 }
1093}
1094template RANAP_PDU
1095tr_RANAP_DirectTransfer(template NAS_PDU nas,
Vadim Yanitskiye06f2282019-06-20 05:02:49 +07001096 template SAPI sapi := *,
1097 template DirectTransfer.protocolIEs ies := *,
Harald Weltea013e682018-06-18 19:49:39 +02001098 template DirectTransfer.protocolExtensions exts := *) := {
1099 initiatingMessage := {
1100 procedureCode := id_DirectTransfer,
1101 criticality := ignore,
1102 value_ := {
1103 directTransfer := {
Vadim Yanitskiye06f2282019-06-20 05:02:49 +07001104 protocolIEs := f_gen_tr_dt_ies(nas, sapi, ies),
Harald Weltea013e682018-06-18 19:49:39 +02001105 protocolExtensions := exts
1106 }
1107 }
1108 }
1109}
1110
1111
1112/*****************************************************************************************************
1113 * RAB Assignment Request
1114 *****************************************************************************************************/
1115
1116template (value) RAB_Parameters ts_RabParams := {
1117 trafficClass := conversational,
1118 rAB_AsymmetryIndicator := symmetric_bidirectional,
1119 maxBitrate := { 12200 },
1120 guaranteedBitRate := { 12200 },
1121 deliveryOrder := delivery_order_requested,
1122 maxSDU_Size := 244,
1123 sDU_Parameters := {
1124 {
1125 sDU_ErrorRatio := { mantissa := 1, exponent := 5, iE_Extensions := omit },
1126 residualBitErrorRatio := { mantissa := 1, exponent := 6, iE_Extensions := omit },
1127 deliveryOfErroneousSDU := yes,
1128 sDU_FormatInformationParameters := {
1129 {
1130 subflowSDU_Size := 81,
1131 rAB_SubflowCombinationBitRate := omit,
1132 iE_Extensions := omit
1133 }, {
1134 subflowSDU_Size := 39,
1135 rAB_SubflowCombinationBitRate := omit,
1136 iE_Extensions := omit
1137 }
1138 },
1139 iE_Extensions := omit
1140 }, {
1141 sDU_ErrorRatio := omit,
1142 residualBitErrorRatio := { mantissa := 1, exponent := 3, iE_Extensions := omit },
1143 deliveryOfErroneousSDU := no_error_detection_consideration,
1144 sDU_FormatInformationParameters := {
1145 {
1146 subflowSDU_Size := 103,
1147 rAB_SubflowCombinationBitRate := omit,
1148 iE_Extensions := omit
1149 }, {
1150 subflowSDU_Size := 0,
1151 rAB_SubflowCombinationBitRate := omit,
1152 iE_Extensions := omit
1153 }
1154 },
1155 iE_Extensions := omit
1156 }, {
1157 sDU_ErrorRatio := omit,
1158 residualBitErrorRatio := { mantissa := 5, exponent := 3, iE_Extensions := omit },
1159 deliveryOfErroneousSDU := no_error_detection_consideration,
1160 sDU_FormatInformationParameters := {
1161 {
1162 subflowSDU_Size := 60,
1163 rAB_SubflowCombinationBitRate := omit,
1164 iE_Extensions := omit
1165 }, {
1166 subflowSDU_Size := 0,
1167 rAB_SubflowCombinationBitRate := omit,
1168 iE_Extensions := omit
1169 }
1170 },
1171 iE_Extensions := omit
1172 }
1173 },
1174 transferDelay := 80,
1175 trafficHandlingPriority := omit,
1176 allocationOrRetentionPriority := {
1177 priorityLevel := 15,
1178 pre_emptionCapability := shall_not_trigger_pre_emption,
1179 pre_emptionVulnerability := pre_emptable,
1180 queuingAllowed := queueing_not_allowed,
1181 iE_Extensions := omit
1182 },
1183 sourceStatisticsDescriptor := omit,
1184 relocationRequirement := omit,
1185 iE_Extensions := omit
1186}
1187
1188template (value) UserPlaneInformation ts_UserPlaneInfo := {
1189 userPlaneMode := support_mode_for_predefined_SDU_sizes,
1190 uP_ModeVersions := '0000000000000010'B,
1191 iE_Extensions := omit
1192}
1193
1194template (value) TransportLayerInformation ts_TLI(template (value) TransportLayerAddress tla,
1195 template (value) BindingID binding_id) := {
1196 transportLayerAddress := tla,
1197 iuTransportAssociation := {
1198 bindingID := binding_id
1199 },
1200 iE_Extensions := omit
1201}
1202template TransportLayerInformation tr_TLI(template TransportLayerAddress tla,
1203 template BindingID binding_id) := {
1204 transportLayerAddress := tla,
1205 iuTransportAssociation := {
1206 bindingID := binding_id
1207 },
1208 iE_Extensions := *
1209}
1210
1211template (value) RAB_SetupOrModifyList ts_RAB_SML(template (value) RAB_ID rab_id,
1212 template (value) TransportLayerAddress tla,
1213 template (value) BindingID binding_id) := { {
1214 {
1215 id := id_RAB_SetupOrModifyItem,
1216 firstCriticality := reject,
1217 firstValue := {
1218 rAB_SetupOrModifyItemFirst := {
1219 rAB_ID := rab_id,
1220 nAS_SynchronisationIndicator := omit,
1221 rAB_Parameters := ts_RabParams,
1222 userPlaneInformation := ts_UserPlaneInfo,
1223 transportLayerInformation := ts_TLI(tla, binding_id),
1224 service_Handover := omit,
1225 iE_Extensions := omit
1226 }
1227 },
1228 secondCriticality := ignore,
1229 secondValue := {
1230 rAB_SetupOrModifyItemSecond := {
1231 pDP_TypeInformation := omit,
1232 dataVolumeReportingIndication := omit,
1233 dl_GTP_PDU_SequenceNumber := omit,
1234 ul_GTP_PDU_SequenceNumber := omit,
1235 dl_N_PDU_SequenceNumber := omit,
1236 ul_N_PDU_SequenceNumber := omit,
1237 iE_Extensions := omit
1238 }
1239 }
1240 }
1241} }
1242template RAB_SetupOrModifyList tr_RAB_SML(template RAB_ID rab_id,
1243 template TransportLayerAddress tla,
1244 template BindingID binding_id) := { {
1245 {
1246 id := id_RAB_SetupOrModifyItem,
1247 firstCriticality := reject,
1248 firstValue := {
1249 rAB_SetupOrModifyItemFirst := {
1250 rAB_ID := rab_id,
1251 nAS_SynchronisationIndicator := *,
1252 rAB_Parameters := ts_RabParams,
1253 userPlaneInformation := ts_UserPlaneInfo,
1254 transportLayerInformation := tr_TLI(tla, binding_id),
1255 service_Handover := *,
1256 iE_Extensions := *
1257 }
1258 },
1259 secondCriticality := ignore,
1260 secondValue := {
1261 rAB_SetupOrModifyItemSecond := {
1262 pDP_TypeInformation := omit,
1263 dataVolumeReportingIndication := omit,
1264 dl_GTP_PDU_SequenceNumber := omit,
1265 ul_GTP_PDU_SequenceNumber := omit,
1266 dl_N_PDU_SequenceNumber := omit,
1267 ul_N_PDU_SequenceNumber := omit,
1268 iE_Extensions := omit
1269 }
1270 }
1271 }
1272} }
1273
1274
1275template (value) RANAP_PDU
1276ts_RANAP_RabAssReq(template (value) RAB_SetupOrModifyList rab_sml,
1277 template (omit) RAB_AssignmentRequest.protocolExtensions exts := omit) := {
1278 initiatingMessage := {
1279 procedureCode := id_RAB_Assignment,
1280 criticality := reject,
1281 value_ := {
1282 rAB_AssignmentRequest := {
1283 protocolIEs := {
1284 {
1285 id := id_RAB_SetupOrModifyList,
1286 criticality := reject,
1287 value_ := {
1288 rAB_SetupOrModifyList := rab_sml
1289 }
1290 }
1291 },
1292 protocolExtensions := exts
1293 }
1294 }
1295 }
1296}
1297template RANAP_PDU
1298tr_RANAP_RabAssReq(template RAB_SetupOrModifyList rab_sml,
1299 template RAB_AssignmentRequest.protocolExtensions exts := *) := {
1300 initiatingMessage := {
1301 procedureCode := id_RAB_Assignment,
1302 criticality := reject,
1303 value_ := {
1304 rAB_AssignmentRequest := {
1305 protocolIEs := {
1306 {
1307 id := id_RAB_SetupOrModifyList,
1308 criticality := reject,
1309 value_ := {
1310 rAB_SetupOrModifyList := rab_sml
1311 }
1312 }
1313 },
1314 protocolExtensions := exts
1315 }
1316 }
1317 }
1318}
1319
1320
1321template (value) RANAP_PDU
1322ts_RANAP_RabAssResp(template (value) RAB_SetupOrModifiedList rab_sml,
1323 template (omit) RAB_AssignmentResponse.protocolExtensions exts := omit) := {
1324 outcome := {
1325 procedureCode := id_RAB_Assignment,
1326 criticality := reject,
1327 value_ := {
1328 rAB_AssignmentResponse := {
1329 protocolIEs := {
1330 {
1331 id := id_RAB_SetupOrModifiedList,
1332 criticality := ignore,
1333 value_ := {
1334 rAB_SetupOrModifiedList := rab_sml
1335 }
1336 }
1337 /* RAB-ReleasedList */
1338 /* RAB-QueuedList */
1339 /* RAB-FailedList */
1340 /* RAB-ReleaseFailedList */
1341 },
1342 protocolExtensions := exts
1343 }
1344 }
1345 }
1346}
1347template RANAP_PDU
1348tr_RANAP_RabAssResp(template RAB_SetupOrModifiedList rab_sml,
1349 template RAB_AssignmentResponse.protocolExtensions exts := *) := {
1350 outcome := {
1351 procedureCode := id_RAB_Assignment,
1352 criticality := reject,
1353 value_ := {
1354 rAB_AssignmentResponse := {
1355 protocolIEs := {
1356 {
1357 id := id_RAB_SetupOrModifiedList,
1358 criticality := ignore,
1359 value_ := {
1360 rAB_SetupOrModifiedList := rab_sml
1361 }
1362 }, *
1363 /* RAB-ReleasedList */
1364 /* RAB-QueuedList */
1365 /* RAB-FailedList */
1366 /* RAB-ReleaseFailedList */
1367 },
1368 protocolExtensions := exts
1369 }
1370 }
1371 }
1372}
1373
1374
1375/*****************************************************************************************************
1376 *
1377 *****************************************************************************************************/
1378
1379/* extract the L3 (NAS) from a given RANAP message */
1380function f_ranap_extract_l3(RANAP_PDU ranap) return template (omit) octetstring
1381{
1382 var integer i;
1383
1384 if (match(ranap, tr_RANAP_initialUE_CS(?, ?, ?, ?, ?)) or
1385 match(ranap, tr_RANAP_initialUE_PS(?, ?, ?, ?, ?, ?)) ) {
1386 var InitialUE_Message.protocolIEs ies := ranap.initiatingMessage.value_.initialUE_Message.protocolIEs;
1387 for (i := 0; i < lengthof(ies); i := i+1) {
1388 if (ies[i].id == id_NAS_PDU) {
1389 return ies[i].value_.nAS_PDU;
1390 }
1391 }
Vadim Yanitskiye06f2282019-06-20 05:02:49 +07001392 } else if (match(ranap, tr_RANAP_DirectTransfer(?))) {
Harald Weltea013e682018-06-18 19:49:39 +02001393 var DirectTransfer.protocolIEs ies := ranap.initiatingMessage.value_.directTransfer.protocolIEs;
1394 for (i := 0; i < lengthof(ies); i := i+1) {
1395 if (ies[i].id == id_NAS_PDU) {
1396 return ies[i].value_.nAS_PDU;
1397 }
1398 }
1399 } else {
1400 /* relocationInformation not supported yet*/
1401 }
1402 return omit;
1403}
1404
1405function f_ranap_extract_sapi(RANAP_PDU ranap) return template (omit) SAPI
1406{
1407 var integer i;
1408
1409 /* InitialUE message has no SAPI */
Vadim Yanitskiye06f2282019-06-20 05:02:49 +07001410 if (match(ranap, tr_RANAP_DirectTransfer(?, omit))) {
Harald Weltea013e682018-06-18 19:49:39 +02001411 var DirectTransfer.protocolIEs ies := ranap.initiatingMessage.value_.directTransfer.protocolIEs;
1412 for (i := 0; i < lengthof(ies); i := i+1) {
1413 if (ies[i].id == id_SAPI) {
1414 return ies[i].value_.sAPI;
1415 }
1416 }
1417 }
1418 return omit;
1419}
1420
1421
1422}