blob: 19cb99f3a0bf31b89e6752f5450526b92ac94ddb [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;
17
18type enumerated CmServiceType {
19 CM_TYPE_MO_CALL ('0001'B),
20 CM_TYPE_EMERG_CALL ('0010'B),
21 CM_TYPE_MO_SMS ('0100'B),
22 CM_TYPE_SS_ACT ('1000'B)
23}
24
25
26/* send template fro Mobile Identity (TMSI) */
27template MobileIdentityLV ts_MI_TMSI_LV(OCT4 tmsi) := {
28 lengthIndicator := 0, /* overwritten */
29 mobileIdentityV := {
30 typeOfIdentity := '000'B, /* overwritten */
31 oddEvenInd_identity := {
32 tmsi_ptmsi := {
33 oddevenIndicator := '0'B,
34 fillerDigit := '1111'B,
35 octets := tmsi
36 }
37 }
38 }
39}
40
41private function f_enc_IMSI_L3(hexstring digits) return IMSI_L3 {
42 var IMSI_L3 l3;
43 var integer len := lengthof(digits);
44 if (len rem 2 == 1) { /* modulo remainder */
Harald Welte365f4ed2017-11-23 00:00:43 +010045 l3.oddevenIndicator := '1'B;
Harald Weltec76f29f2017-11-22 12:46:46 +010046 l3.fillerDigit := '1111'B;
47 } else {
Harald Welte365f4ed2017-11-23 00:00:43 +010048 l3.oddevenIndicator := '0'B;
Harald Weltec76f29f2017-11-22 12:46:46 +010049 l3.fillerDigit := omit;
50 }
51 l3.digits := digits;
52 return l3;
53}
54
55/* send template fro Mobile Identity (IMSI) */
56template (value) MobileIdentityLV ts_MI_IMSI_LV(hexstring imsi_digits) := {
57 lengthIndicator := 0, /* overwritten */
58 mobileIdentityV := {
59 typeOfIdentity := '000'B, /* overwritten */
60 oddEvenInd_identity := {
61 imsi := f_enc_IMSI_L3(imsi_digits)
62 }
63 }
64}
65
66/* Send template for Classmark 2 */
67template (value) MobileStationClassmark2_LV ts_CM2 := {
68 lengthIndicator := 0,
69 rf_PowerCapability := '000'B,
70 a5_1 := '0'B,
71 esind := '1'B,
72 revisionLevel := '10'B,
73 spare1_1 := '0'B,
74 mobileStationClassmark2_oct4 := omit,
75 mobileStationClassmark2_oct5 := omit
76};
77
78/* Send template for CM SERVICE REQUEST */
79template (value) PDU_ML3_MS_NW ts_CM_SERV_REQ(BIT4 serv_type, MobileIdentityLV mi_lv) := {
80 discriminator := '0000'B, /* overwritten */
81 tiOrSkip := {
82 skipIndicator := '0000'B
83 },
84 msgs := {
85 mm := {
86 cMServiceRequest := {
87 messageType := '000000'B, /* overwritten */
88 nsd := '00'B,
89 cm_ServiceType := serv_type,
90 cipheringKeySequenceNumber := { '000'B, '0'B },
91 mobileStationClassmark2 := ts_CM2,
92 mobileIdentity := mi_lv,
93 priorityLevel := omit,
94 additionalUpdateParameterTV := omit,
95 deviceProperties := omit
96 }
97 }
98 }
99}
100
101/* Send template for PAGING RESPONSE */
102template (value) PDU_ML3_MS_NW ts_PAG_RESP(MobileIdentityLV mi_lv) := {
103 discriminator := '0000'B, /* overwritten */
104 tiOrSkip := {
105 skipIndicator := '0000'B
106 },
107 msgs := {
108 rrm := {
109 pagingResponse := {
110 messageType := '00000000'B, /* overwritten */
111 cipheringKeySequenceNumber := { '000'B, '0'B },
112 spare1_4 := '0000'B,
113 mobileStationClassmark := ts_CM2,
114 mobileIdentity := mi_lv,
115 additionalUpdateParameters := omit
116 }
117 }
118 }
119}
120
Harald Welte15166142017-12-16 23:02:08 +0100121template (value) PDU_ML3_MS_NW ts_RRM_ModeModifyAck(ChannelDescription2_V desc, ChannelMode_V mode) := {
122 discriminator := '0000'B, /* overwritten */
123 tiOrSkip := {
124 skipIndicator := '0000'B
125 },
126 msgs := {
127 rrm := {
128 channelModeModifyAck := {
129 messageType := '00010111'B,
130 channelDescription := desc,
131 channelMode := mode,
132 extendedTSCSet := omit
133 }
134 }
135 }
136}
137
Harald Welte73cd2712017-12-17 00:44:52 +0100138template (value) PDU_ML3_MS_NW ts_RRM_CiphModeCompl := {
139 discriminator := '0000'B, /* overwritten */
140 tiOrSkip := {
141 skipIndicator := '0000'B
142 },
143 msgs := {
144 rrm := {
145 cipheringModeComplete := {
146 messageType := '00110010'B,
147 mobileEquipmentIdentity := omit
148 }
149 }
150 }
151}
152
Harald Welte15166142017-12-16 23:02:08 +0100153
Harald Weltec76f29f2017-11-22 12:46:46 +0100154}