blob: b994d1f45f768ef0b57ea4634349d3dd47a48638 [file] [log] [blame]
Harald Weltedf327232017-12-28 22:51:51 +01001module GSUP_Types {
2
3import from General_Types all;
4import from Osmocom_Types all;
5
6type enumerated GSUP_IEI {
7 OSMO_GSUP_IMSI_IE ('01'O),
8 OSMO_GSUP_CAUSE_IE ('02'O),
9 OSMO_GSUP_AUTH_TUPLE_IE ('03'O),
10 OSMO_GSUP_PDP_INFO_COMPL_IE ('04'O),
11 OSMO_GSUP_PDP_INFO_IE ('05'O),
12 OSMO_GSUP_CANCEL_TYPE_IE ('06'O),
13 OSMO_GSUP_FREEZE_PTMSI_IE ('07'O),
14 OSMO_GSUP_MSISDN_IE ('08'O),
15 OSMO_GSUP_HLR_NUMBER_IE ('09'O),
16 OSMO_GSUP_PDP_CONTEXT_ID_IE ('10'O),
17 OSMO_GSUP_PDP_TYPE_IE ('11'O),
18 OSMO_GSUP_ACCESS_POINT_NAME_IE ('12'O),
19 OSMO_GSUP_PDP_QOS_IE ('13'O),
20 OSMO_GSUP_CHARG_CHAR_IE ('14'O),
21
22 OSMO_GSUP_RAND_IE ('20'O),
23 OSMO_GSUP_SRES_IE ('21'O),
24 OSMO_GSUP_KC_IE ('22'O),
25 OSMO_GSUP_IK_IE ('23'O),
26 OSMO_GSUP_CK_IE ('24'O),
27 OSMO_GSUP_AUTN_IE ('25'O),
28 OSMO_GSUP_AUTS_IE ('26'O),
29 OSMO_GSUP_RES_IE ('27'O),
30 OSMO_GSUP_CN_DOMAIN_IE ('28'O)
31} with { variant "FIELDLENGTH(8)" };
32
33type enumerated GSUP_MessageType {
34 OSMO_GSUP_MSGT_UPDATE_LOCATION_REQUEST ('00000100'B),
35 OSMO_GSUP_MSGT_UPDATE_LOCATION_ERROR ('00000101'B),
36 OSMO_GSUP_MSGT_UPDATE_LOCATION_RESULT ('00000110'B),
37
38 OSMO_GSUP_MSGT_SEND_AUTH_INFO_REQUEST ('00001000'B),
39 OSMO_GSUP_MSGT_SEND_AUTH_INFO_ERROR ('00001001'B),
40 OSMO_GSUP_MSGT_SEND_AUTH_INFO_RESULT ('00001010'B),
41
42 OSMO_GSUP_MSGT_AUTH_FAIL_REPORT ('00001011'B),
43
44 OSMO_GSUP_MSGT_PURGE_MS_REQUEST ('00001100'B),
45 OSMO_GSUP_MSGT_PURGE_MS_ERROR ('00001101'B),
46 OSMO_GSUP_MSGT_PURGE_MS_RESULT ('00001110'B),
47
48 OSMO_GSUP_MSGT_INSERT_DATA_REQUEST ('00010000'B),
49 OSMO_GSUP_MSGT_INSERT_DATA_ERROR ('00010001'B),
50 OSMO_GSUP_MSGT_INSERT_DATA_RESULT ('00010010'B),
51
52 OSMO_GSUP_MSGT_DELETE_DATA_REQUEST ('00010100'B),
53 OSMO_GSUP_MSGT_DELETE_DATA_ERROR ('00010101'B),
54 OSMO_GSUP_MSGT_DELETE_DATA_RESULT ('00010110'B),
55
56 OSMO_GSUP_MSGT_LOCATION_CANCEL_REQUEST ('00011100'B),
57 OSMO_GSUP_MSGT_LOCATION_CANCEL_ERROR ('00011101'B),
58 OSMO_GSUP_MSGT_LOCATION_CANCEL_RESULT ('00011110'B)
59} with { variant "FIELDLENGTH(8)" };
60
61type enumerated GSUP_CancelType {
62 OSMO_GSUP_CANCEL_TYPE_UPDATE (1),
63 OSMO_GSUP_CANCEL_TYPE_WITHDRAW (2)
64} with { variant "FIELDLENGTH(8)" };
65
66type enumerated GSUP_CnDomain {
67 OSMO_GSUP_CN_DOMAIN_PS (1),
68 OSMO_GSUP_CN_DOMAIN_CS (2)
69} with { variant "FIELDLENGTH(8)" };
70
71type record GSUP_IE {
72 GSUP_IEI tag,
73 uint8_t len,
74 GSUP_IeValue val
75} with { variant (len) "LENGTHTO(val)"
76 variant (val) "CROSSTAG(imsi, tag = OSMO_GSUP_IMSI_IE;
77 cause, tag = OSMO_GSUP_CAUSE_IE;
78 cancel_type, tag = OSMO_GSUP_CANCEL_TYPE_IE;
79 auts, tag = OSMO_GSUP_AUTS_IE;
80 rand, tag = OSMO_GSUP_RAND_IE;
81 msisdn, tag = OSMO_GSUP_MSISDN_IE;
82 hlr_number, tag = OSMO_GSUP_HLR_NUMBER_IE;
83 cn_domain, tag = OSMO_GSUP_CN_DOMAIN_IE;
84 charg_char, tag = OSMO_GSUP_CHARG_CHAR_IE)"
85};
86
87type record of GSUP_IE GSUP_IEs;
88
89type union GSUP_IeValue {
90 hexstring imsi,
91 integer cause,
92 GSUP_CancelType cancel_type,
93 //boolean pdp_info_compl,
94 //boolean freeze_ptmsi,
95 GSUP_IEs pdp_info,
96 GSUP_IEs auth_tuple,
97 octetstring auts,
98 octetstring rand,
99 hexstring msisdn,
100 octetstring hlr_number,
101 GSUP_CnDomain cn_domain,
102 octetstring charg_char
103};
104
105type record GSUP_PDU {
106 GSUP_MessageType msg_type,
107 GSUP_IEs ies
108};
109
110external function enc_GSUP_PDU(in GSUP_PDU msg) return octetstring
111 with { extension "prototype(convert) encode(RAW)" };
112
113external function dec_GSUP_PDU(in octetstring msg) return GSUP_PDU
114 with { extension "prototype(convert) decode(RAW)" };
115
116
117template GSUP_PDU tr_GSUP(template GSUP_MessageType msgt := ?, template GSUP_IEs ies := *) := {
118 msg_type := msgt,
119 ies := ies
120}
121
122template GSUP_PDU ts_GSUP(GSUP_MessageType msgt, GSUP_IEs ies := {}) := {
123 msg_type := msgt,
124 ies := ies
125}
126
127template GSUP_PDU ts_GSUP_SAI_REQ(hexstring imsi) :=
128 ts_GSUP(OSMO_GSUP_MSGT_SEND_AUTH_INFO_REQUEST, { valueof(ts_GSUP_IE_IMSI(imsi)) });
129
130template GSUP_PDU tr_GSUP_SAI_ERR(template hexstring imsi, template integer cause) :=
131 tr_GSUP(OSMO_GSUP_MSGT_SEND_AUTH_INFO_REQUEST, {
132 tr_GSUP_IE_IMSI(imsi), tr_GSUP_IE_Cause(cause) });
133
134template GSUP_PDU tr_GSUP_SAI_RES(template hexstring imsi) :=
135 tr_GSUP(OSMO_GSUP_MSGT_SEND_AUTH_INFO_REQUEST, {
136 tr_GSUP_IE_IMSI(imsi), *, tr_GSUP_IE(OSMO_GSUP_AUTH_TUPLE_IE), * });
137
138
139
140template GSUP_IE tr_GSUP_IE(template GSUP_IEI iei, template GSUP_IeValue val := ?) := {
141 tag := iei,
142 len := ?,
143 val := val
144}
145
146template (value) GSUP_IE ts_GSUP_IE_IMSI(hexstring imsi) := {
147 tag := OSMO_GSUP_IMSI_IE,
148 len := 0, /* overwritten */
149 val := {
150 imsi := imsi
151 }
152}
153
154template GSUP_IE tr_GSUP_IE_IMSI(template hexstring imsi) := {
155 tag := OSMO_GSUP_IMSI_IE,
156 len := ?,
157 val := {
158 imsi := imsi
159 }
160}
161
162template (value) GSUP_IE ts_GSUP_IE_Cause(integer cause) := {
163 tag := OSMO_GSUP_CAUSE_IE,
164 len := 0, /* overwritten */
165 val := {
166 cause := cause
167 }
168}
169
170template GSUP_IE tr_GSUP_IE_Cause(template integer cause) := {
171 tag := OSMO_GSUP_CAUSE_IE,
172 len := ?,
173 val := {
174 cause := cause
175 }
176}
177
178template (value) GSUP_IE ts_GSUP_IE_AUTS(octetstring auts) := {
179 tag := OSMO_GSUP_AUTS_IE,
180 len := 0, /* overwritten */
181 val := {
182 auts := auts
183 }
184}
185
186template (value) GSUP_IE ts_GSUP_IE_RAND(octetstring rand) := {
187 tag := OSMO_GSUP_RAND_IE,
188 len := 0, /* overwritten */
189 val := {
190 rand := rand
191 }
192}
193
194
195
196
197} with { encode "RAW"; variant "FIELDORDER(msb)" }