blob: 07e1b00e42ba33df6c8efc2c9d120f7664c59d25 [file] [log] [blame]
Harald Weltea013e682018-06-18 19:49:39 +02001module RANAP_CodecPort {
2
3/* Simple RANAP Codec Port, translating between raw SCCP primitives with
4 * octetstring payload towards the SCCP provider, and RANAP-SCCP primitives
5 * which carry the decoded RANAP data types as payload.
6 *
7 * (C) 2017-2018 by Harald Welte <laforge@gnumonks.org>
8 * All rights reserved.
9 *
10 * Released under the terms of GNU General Public License, Version 2 or
11 * (at your option) any later version.
12 */
13
14import from General_Types all;
15import from Osmocom_Types all;
16
17import from SCCPasp_Types all;
18import from SCCP_Types all;
19
20import from RANAP_PDU_Descriptions all;
21import from RANAP_Types all;
22
23type record RANAP_N_CONNECT_req
24{
25 SCCP_PAR_Address calledAddress,
26 SCCP_PAR_Address callingAddress optional,
27 SCCP_PAR_Expedited_Data_Sel expeditedDataSel optional,
28 SCCP_PAR_Quality_Of_Service qualityOfService optional,
29 RANAP_PDU userData optional,
30 SCCP_PAR_Connection_Id connectionId optional,
31 SCCP_PAR_Importance importance optional
32}
33
34template RANAP_N_CONNECT_req ts_RANAP_CONNECT_req(SCCP_PAR_Address called,
35 SCCP_PAR_Address calling,
36 SCCP_PAR_Connection_Id conn_id,
37 template RANAP_PDU ranap := omit) := {
38 calledAddress := called,
39 callingAddress := calling,
40 expeditedDataSel := omit,
41 qualityOfService := omit,
42 userData := ranap,
43 connectionId := conn_id,
44 importance := omit
45}
46
47type record RANAP_N_CONNECT_ind
48{
49 SCCP_PAR_Address calledAddress,
50 SCCP_PAR_Address callingAddress optional,
51 SCCP_PAR_Quality_Of_Service qualityOfService optional,
52 RANAP_PDU userData optional,
53 SCCP_PAR_Connection_Id connectionId optional,
54 SCCP_PAR_Importance importance optional
55}
56
57template RANAP_N_CONNECT_ind tr_RANAP_CONNECT_ind(template SCCP_PAR_Address called,
58 template SCCP_PAR_Address calling,
59 template RANAP_PDU payload := *) := {
60 calledAddress := called,
61 callingAddress := calling,
62 qualityOfService := *,
63 userData := payload,
64 connectionId := *,
65 importance := *
66}
67
68type record RANAP_N_CONNECT_res
69{
70 SCCP_PAR_Address respondingAddress optional,
71 SCCP_PAR_Expedited_Data_Sel expeditedDataSel optional,
72 SCCP_PAR_Quality_Of_Service qualityOfService optional,
73 RANAP_PDU userData optional,
74 SCCP_PAR_Connection_Id connectionId optional,
75 SCCP_PAR_Importance importance optional
76}
77
78template RANAP_N_CONNECT_res ts_RANAP_CONNECT_res(SCCP_PAR_Connection_Id conn_id,
79 template RANAP_PDU ranap := omit) := {
80 respondingAddress := omit,
81 expeditedDataSel := omit,
82 qualityOfService := omit,
83 userData := ranap,
84 connectionId := conn_id,
85 importance := omit
86}
87
88type record RANAP_N_CONNECT_cfm
89{
90 SCCP_PAR_Address respondingAddress optional,
91 SCCP_PAR_Quality_Of_Service qualityOfService optional,
92 RANAP_PDU userData optional,
93 SCCP_PAR_Connection_Id connectionId optional,
94 SCCP_PAR_Importance importance optional
95}
96
97template RANAP_N_CONNECT_cfm tr_RANAP_CONNECT_cfm(template SCCP_PAR_Connection_Id conn_id,
98 template RANAP_PDU ranap := *) := {
99 respondingAddress := *,
100 qualityOfService := *,
101 userData := ranap,
102 connectionId := conn_id,
103 importance := *
104}
105
106type record RANAP_N_DATA_req
107{
108 RANAP_PDU userData ,
109 SCCP_PAR_Connection_Id connectionId optional ,
110 SCCP_PAR_Importance importance optional
111}
112
113template RANAP_N_DATA_req ts_RANAP_DATA_req(SCCP_PAR_Connection_Id conn_id,
114 template RANAP_PDU ranap) := {
115 userData := ranap,
116 connectionId := conn_id,
117 importance := omit
118}
119
120
121type record RANAP_N_DATA_ind
122{
123 RANAP_PDU userData ,
124 SCCP_PAR_Connection_Id connectionId optional ,
125 SCCP_PAR_Importance importance optional
126}
127
128template RANAP_N_DATA_ind tr_RANAP_DATA_ind(SCCP_PAR_Connection_Id conn_id,
129 template RANAP_PDU ranap := *) := {
130 userData := ranap,
131 connectionId := conn_id,
132 importance := *
133}
134
135
136type record RANAP_N_DISCONNECT_req
137{
138 SCCP_PAR_Address respondingAddress optional,
139 SCCP_PAR_Reason reason ,
140 RANAP_PDU userData optional ,
141 SCCP_PAR_Connection_Id connectionId optional ,
142 SCCP_PAR_Importance importance optional
143}
144
145template RANAP_N_DISCONNECT_req ts_RANAP_DISC_req(SCCP_PAR_Connection_Id conn_id,
146 template SCCP_PAR_Reason reason,
147 template RANAP_PDU ranap := omit) := {
148 respondingAddress := omit,
149 reason := reason,
150 userData := ranap,
151 connectionId := conn_id,
152 importance := omit
153}
154
155
156type record RANAP_N_DISCONNECT_ind
157{
158 SCCP_PAR_Originator originator ,
159 SCCP_PAR_Address respondingAddress optional ,
160 SCCP_PAR_Reason reason ,
161 RANAP_PDU userData optional ,
162 SCCP_PAR_Connection_Id connectionId optional ,
163 SCCP_PAR_Importance importance optional
164}
165
166template RANAP_N_DISCONNECT_ind tr_RANAP_DISC_ind(template SCCP_PAR_Connection_Id conn_id,
167 template SCCP_PAR_Originator originator,
168 template SCCP_PAR_Reason reason,
169 template RANAP_PDU ranap := *) := {
170 originator := originator,
171 respondingAddress:= *,
172 reason := reason,
173 userData := ranap,
174 connectionId := conn_id,
175 importance := *
176}
177
178type record RANAP_N_UNITDATA_req
179{
180 SCCP_PAR_Address calledAddress ,
181 SCCP_PAR_Address callingAddress ,
182 SCCP_PAR_Sequence_Control sequenceControl optional ,
183 SCCP_PAR_Return_Option returnOption optional ,
184 RANAP_PDU userData ,
185 SCCP_PAR_Importance importance optional
186 }
187
188template RANAP_N_UNITDATA_req ts_RANAP_UNITDATA_req(SCCP_PAR_Address called, SCCP_PAR_Address calling, template RANAP_PDU payload) := {
189 calledAddress := called,
190 callingAddress := calling,
191 sequenceControl := omit,
192 returnOption := omit,
193 userData := payload,
194 importance := omit
195}
196
197type record RANAP_N_UNITDATA_ind
198{
199 SCCP_PAR_Address calledAddress ,
200 SCCP_PAR_Address callingAddress ,
201 SCCP_PAR_Sequence_Control sequenceControl optional ,
202 SCCP_PAR_Return_Option returnOption optional ,
203 RANAP_PDU userData ,
204 SCCP_PAR_Importance importance optional
205}
206
207template RANAP_N_UNITDATA_ind tr_RANAP_UNITDATA_ind(template SCCP_PAR_Address called, template SCCP_PAR_Address calling, template RANAP_PDU payload) := {
208 calledAddress := called,
209 callingAddress := calling,
210 sequenceControl := *,
211 returnOption := *,
212 userData := payload,
213 importance := *
214}
215
216type record RANAP_N_NOTICE_ind
217{
218 SCCP_PAR_Address calledAddress ,
219 SCCP_PAR_Address callingAddress ,
220 SCCP_PAR_Reason_For_Return reasonForReturn ,
221 RANAP_PDU userData ,
222 SCCP_PAR_Importance importance optional
223}
224
225
226
227private function f_dec_ConnectInd(in ASP_SCCP_N_CONNECT_ind pin, out RANAP_N_CONNECT_ind pout) {
228 pout.calledAddress := pin.calledAddress;
229 pout.callingAddress := pin.callingAddress;
230 pout.qualityOfService := pin.qualityOfService;
231 if (ispresent(pin.userData)) {
232 pout.userData := dec_RANAP_PDU(pin.userData);
233 } else {
234 pout.userData := omit;
235 }
236 pout.connectionId := pin.connectionId;
237 pout.importance := pin.importance;
238 //port.setstate(0);
239} with {extension "prototype(fast)" }
240
241private function f_dec_ConnectCfm(in ASP_SCCP_N_CONNECT_cfm pin, out RANAP_N_CONNECT_cfm pout) {
242 pout.respondingAddress := pin.respondingAddress;
243 pout.qualityOfService := pin.qualityOfService;
244 if (ispresent(pin.userData)) {
245 pout.userData := dec_RANAP_PDU(pin.userData);
246 } else {
247 pout.userData := omit;
248 }
249 pout.connectionId := pin.connectionId;
250 pout.importance := pin.importance;
251 //port.setstate(0);
252} with {extension "prototype(fast)" }
253
254private function f_dec_DataInd(in ASP_SCCP_N_DATA_ind pin, out RANAP_N_DATA_ind pout) {
255 pout.userData := dec_RANAP_PDU(pin.userData);
256 pout.connectionId := pin.connectionId;
257 pout.importance := pin.importance;
258 //port.setstate(0);
259} with {extension "prototype(fast)" }
260
261private function f_dec_DisconnectInd(in ASP_SCCP_N_DISCONNECT_ind pin, out RANAP_N_DISCONNECT_ind pout) {
262 pout.originator := pin.originator;
263 pout.respondingAddress := pin.respondingAddress;
264 pout.reason := pin.reason;
265 if (ispresent(pin.userData)) {
266 pout.userData := dec_RANAP_PDU(pin.userData);
267 } else {
268 pout.userData := omit;
269 }
270 pout.connectionId := pin.connectionId;
271 pout.importance := pin.importance;
272 //port.setstate(0);
273} with {extension "prototype(fast)" }
274
275private function f_dec_UnitdataInd(in ASP_SCCP_N_UNITDATA_ind pin, out RANAP_N_UNITDATA_ind pout) {
276 pout.calledAddress := pin.calledAddress;
277 pout.callingAddress := pin.callingAddress;
278 pout.sequenceControl := pin.sequenceControl;
279 pout.returnOption := pin.returnOption;
280 pout.userData := dec_RANAP_PDU(pin.userData);
281 pout.importance := pin.importance;
282 //port.setstate(0);
283} with {extension "prototype(fast)" }
284
285private function f_dec_NoticeInd(in ASP_SCCP_N_NOTICE_ind pin, out RANAP_N_NOTICE_ind pout) {
286 pout.calledAddress := pin.calledAddress;
287 pout.callingAddress := pin.callingAddress;
288 pout.reasonForReturn := pin.reasonForReturn;
289 pout.userData := dec_RANAP_PDU(pin.userData);
290 pout.importance := pin.importance;
291 //port.setstate(0);
292} with {extension "prototype(fast)" }
293
294
295
296private function f_enc_ConnectReq(in RANAP_N_CONNECT_req pin, out ASP_SCCP_N_CONNECT_req pout) {
297 pout.calledAddress := pin.calledAddress;
298 pout.callingAddress := pin.callingAddress;
299 pout.expeditedDataSel := pin.expeditedDataSel;
300 pout.qualityOfService := pin.qualityOfService;
301 if (ispresent(pin.userData)) {
302 pout.userData := enc_RANAP_PDU(pin.userData);
303 } else {
304 pout.userData := omit;
305 }
306 pout.connectionId := pin.connectionId;
307 pout.importance := pin.importance;
308 //port.setstate(0);
309} with {extension "prototype(fast)" }
310
311private function f_enc_ConnectRes(in RANAP_N_CONNECT_res pin, out ASP_SCCP_N_CONNECT_res pout) {
312 pout.respondingAddress := pin.respondingAddress;
313 pout.expeditedDataSel := pin.expeditedDataSel;
314 pout.qualityOfService := pin.qualityOfService;
315 if (ispresent(pin.userData)) {
316 pout.userData := enc_RANAP_PDU(pin.userData);
317 } else {
318 pout.userData := omit;
319 }
320 pout.connectionId := pin.connectionId;
321 pout.importance := pin.importance;
322 //port.setstate(0);
323} with {extension "prototype(fast)" }
324
325private function f_enc_DataReq(in RANAP_N_DATA_req pin, out ASP_SCCP_N_DATA_req pout) {
326 pout.userData := enc_RANAP_PDU(pin.userData);
327 pout.connectionId := pin.connectionId;
328 pout.importance := pin.importance;
329 //port.setstate(0);
330} with {extension "prototype(fast)" }
331
332private function f_enc_DisconnectReq(in RANAP_N_DISCONNECT_req pin, out ASP_SCCP_N_DISCONNECT_req pout) {
333 pout.respondingAddress := pin.respondingAddress;
334 pout.reason := pin.reason;
335 if (ispresent(pin.userData)) {
336 pout.userData := enc_RANAP_PDU(pin.userData);
337 } else {
338 pout.userData := omit;
339 }
340 pout.connectionId := pin.connectionId;
341 pout.importance := pin.importance;
342 //port.setstate(0);
343} with {extension "prototype(fast)" }
344
345private function f_enc_UnitdataReq(in RANAP_N_UNITDATA_req pin, out ASP_SCCP_N_UNITDATA_req pout) {
346 pout.calledAddress := pin.calledAddress;
347 pout.callingAddress := pin.callingAddress;
348 pout.userData := enc_RANAP_PDU(pin.userData);
349 pout.sequenceControl := pin.sequenceControl;
350 pout.returnOption := pin.returnOption;
351 pout.importance := pin.importance;
352 //port.setstate(0);
353} with {extension "prototype(fast)" }
354
355
356/*
357type port RANAP_CODEC_PT message map to SCCPasp_PT {
358 out RANAP_N_CONNECT_req to ASP_SCCP_N_CONNECT_req with f_enc_ConnectReq(),
359 RANAP_N_CONNECT_res to ASP_SCCP_N_CONNECT_res with f_enc_ConnectRes(),
360 RANAP_N_DATA_req to ASP_SCCP_N_DATA_req with f_enc_DataReq(),
361 RANAP_N_DISCONNECT_req to ASP_SCCP_N_DISCONNECT_req with f_enc_DisconnectReq(),
362 RANAP_N_UNITDATA_req to ASP_SCCP_N_UNITDATA_req with f_enc_UnitdataReq(),
363 ASP_SCCP_N_RESET_req, ASP_SCCP_N_RESET_resp;
364
365 in RANAP_N_CONNECT_ind from ASP_SCCP_N_CONNECT_ind with f_dec_ConnectInd(),
366 RANAP_N_CONNECT_cfm from ASP_SCCP_N_CONNECT_cfm with f_dec_ConnectCfm(),
367 RANAP_N_DATA_ind from ASP_SCCP_N_DATA_ind with f_dec_DataInd(),
368 RANAP_N_DISCONNECT_ind from ASP_SCCP_N_DISCONNECT_ind with f_dec_DisconnectInd(),
369 RANAP_N_UNITDATA_ind from ASP_SCCP_N_UNITDATA_ind with f_dec_UnitdataInd(),
370 RANAP_N_NOTICE_ind from ASP_SCCP_N_NOTICE_ind with f_dec_NoticeInd(),
371 ASP_SCCP_N_STATE_ind, ASP_SCCP_N_RESET_ind, ASP_SCCP_N_RESET_cfm;
372} with {extension "internal"}
373*/
374
375type port RANAP_CODEC_PT message {
376 out RANAP_N_CONNECT_req,
377 RANAP_N_CONNECT_res,
378 RANAP_N_DATA_req,
379 RANAP_N_DISCONNECT_req,
380 RANAP_N_UNITDATA_req,
381 ASP_SCCP_N_RESET_req;
382 in RANAP_N_CONNECT_ind,
383 RANAP_N_CONNECT_cfm,
384 RANAP_N_DATA_ind,
385 RANAP_N_DISCONNECT_ind,
386 RANAP_N_UNITDATA_ind,
387 RANAP_N_NOTICE_ind,
388 ASP_SCCP_N_RESET_ind,
389 ASP_SCCP_N_RESET_cfm,
390 ASP_SCCP_N_STATE_ind;
391} with { extension "internal user SCCPasp_PT
392 out(RANAP_N_CONNECT_req -> ASP_SCCP_N_CONNECT_req: function(f_enc_ConnectReq);
393 RANAP_N_CONNECT_res -> ASP_SCCP_N_CONNECT_res: function(f_enc_ConnectRes);
394 RANAP_N_DATA_req -> ASP_SCCP_N_DATA_req: function(f_enc_DataReq);
395 RANAP_N_DISCONNECT_req -> ASP_SCCP_N_DISCONNECT_req: function(f_enc_DisconnectReq);
396 RANAP_N_UNITDATA_req -> ASP_SCCP_N_UNITDATA_req: function(f_enc_UnitdataReq);
397 ASP_SCCP_N_RESET_req -> ASP_SCCP_N_RESET_req: simple)
398 in(ASP_SCCP_N_CONNECT_ind -> RANAP_N_CONNECT_ind: function(f_dec_ConnectInd);
399 ASP_SCCP_N_CONNECT_cfm -> RANAP_N_CONNECT_cfm: function(f_dec_ConnectCfm);
400 ASP_SCCP_N_DATA_ind -> RANAP_N_DATA_ind: function(f_dec_DataInd);
401 ASP_SCCP_N_DISCONNECT_ind -> RANAP_N_DISCONNECT_ind: function(f_dec_DisconnectInd);
402 ASP_SCCP_N_UNITDATA_ind -> RANAP_N_UNITDATA_ind: function(f_dec_UnitdataInd);
403 ASP_SCCP_N_NOTICE_ind -> RANAP_N_NOTICE_ind: function(f_dec_NoticeInd);
404 ASP_SCCP_N_RESET_ind -> ASP_SCCP_N_RESET_ind: simple;
405 ASP_SCCP_N_RESET_cfm -> ASP_SCCP_N_RESET_cfm: simple;
406 ASP_SCCP_N_STATE_ind -> ASP_SCCP_N_STATE_ind: simple)"
407}
408
409
410}