blob: f1d930f5af73ba00815918cf8b2fa444b1458f6d [file] [log] [blame]
Harald Weltea803b722020-08-21 15:42:26 +02001module BSSAP_LE_CodecPort {
2
3/* Simple BSSAP_LE Codec Port, translating between raw SCCP primitives with
4 * octetstring payload towards the SCCP provider, and BSSAP_LE-SCCP primitives
5 * which carry the decoded BSSAP_LE data types as payload.
6 *
7 * (C) 2017 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 * SPDX-License-Identifier: GPL-2.0-or-later
14 */
15
16import from General_Types all;
17import from Osmocom_Types all;
18
19import from SCCPasp_Types all;
20import from SCCP_Types all;
21
22import from BSSAP_LE_Types all;
23
24type record BSSAP_LE_N_CONNECT_req
25{
26 SCCP_PAR_Address calledAddress,
27 SCCP_PAR_Address callingAddress optional,
28 SCCP_PAR_Expedited_Data_Sel expeditedDataSel optional,
29 SCCP_PAR_Quality_Of_Service qualityOfService optional,
30 PDU_BSSAP_LE userData optional,
31 SCCP_PAR_Connection_Id connectionId optional,
32 SCCP_PAR_Importance importance optional
33}
34
35template BSSAP_LE_N_CONNECT_req ts_BSSAP_LE_CONNECT_req(SCCP_PAR_Address called,
36 SCCP_PAR_Address calling,
37 SCCP_PAR_Connection_Id conn_id,
38 template PDU_BSSAP_LE bssap := omit) := {
39 calledAddress := called,
40 callingAddress := calling,
41 expeditedDataSel := omit,
42 qualityOfService := omit,
43 userData := bssap,
44 connectionId := conn_id,
45 importance := omit
46}
47
48type record BSSAP_LE_N_CONNECT_ind
49{
50 SCCP_PAR_Address calledAddress,
51 SCCP_PAR_Address callingAddress optional,
52 SCCP_PAR_Quality_Of_Service qualityOfService optional,
53 PDU_BSSAP_LE userData optional,
54 SCCP_PAR_Connection_Id connectionId optional,
55 SCCP_PAR_Importance importance optional
56}
57
58template BSSAP_LE_N_CONNECT_ind tr_BSSAP_LE_CONNECT_ind(template SCCP_PAR_Address called,
59 template SCCP_PAR_Address calling,
60 template PDU_BSSAP_LE payload := *) := {
61 calledAddress := called,
62 callingAddress := calling,
63 qualityOfService := *,
64 userData := payload,
65 connectionId := *,
66 importance := *
67}
68
69type record BSSAP_LE_N_CONNECT_res
70{
71 SCCP_PAR_Address respondingAddress optional,
72 SCCP_PAR_Expedited_Data_Sel expeditedDataSel optional,
73 SCCP_PAR_Quality_Of_Service qualityOfService optional,
74 PDU_BSSAP_LE userData optional,
75 SCCP_PAR_Connection_Id connectionId optional,
76 SCCP_PAR_Importance importance optional
77}
78
79template BSSAP_LE_N_CONNECT_res ts_BSSAP_LE_CONNECT_res(SCCP_PAR_Connection_Id conn_id,
80 template PDU_BSSAP_LE bssap := omit) := {
81 respondingAddress := omit,
82 expeditedDataSel := omit,
83 qualityOfService := omit,
84 userData := bssap,
85 connectionId := conn_id,
86 importance := omit
87}
88
89type record BSSAP_LE_N_CONNECT_cfm
90{
91 SCCP_PAR_Address respondingAddress optional,
92 SCCP_PAR_Quality_Of_Service qualityOfService optional,
93 PDU_BSSAP_LE userData optional,
94 SCCP_PAR_Connection_Id connectionId optional,
95 SCCP_PAR_Importance importance optional
96}
97
98template BSSAP_LE_N_CONNECT_cfm tr_BSSAP_LE_CONNECT_cfm(template SCCP_PAR_Connection_Id conn_id,
99 template PDU_BSSAP_LE bssap := *) := {
100 respondingAddress := *,
101 qualityOfService := *,
102 userData := bssap,
103 connectionId := conn_id,
104 importance := *
105}
106
107type record BSSAP_LE_N_DATA_req
108{
109 PDU_BSSAP_LE userData ,
110 SCCP_PAR_Connection_Id connectionId optional ,
111 SCCP_PAR_Importance importance optional
112}
113
114template BSSAP_LE_N_DATA_req ts_BSSAP_LE_DATA_req(SCCP_PAR_Connection_Id conn_id,
115 template PDU_BSSAP_LE bssap) := {
116 userData := bssap,
117 connectionId := conn_id,
118 importance := omit
119}
120
121
122type record BSSAP_LE_N_DATA_ind
123{
124 PDU_BSSAP_LE userData ,
125 SCCP_PAR_Connection_Id connectionId optional ,
126 SCCP_PAR_Importance importance optional
127}
128
129template BSSAP_LE_N_DATA_ind tr_BSSAP_LE_DATA_ind(SCCP_PAR_Connection_Id conn_id,
130 template PDU_BSSAP_LE bssap := *) := {
131 userData := bssap,
132 connectionId := conn_id,
133 importance := *
134}
135
136
137type record BSSAP_LE_N_DISCONNECT_req
138{
139 SCCP_PAR_Address respondingAddress optional,
140 SCCP_PAR_Reason reason ,
141 PDU_BSSAP_LE userData optional ,
142 SCCP_PAR_Connection_Id connectionId optional ,
143 SCCP_PAR_Importance importance optional
144}
145
146template BSSAP_LE_N_DISCONNECT_req ts_BSSAP_LE_DISC_req(SCCP_PAR_Connection_Id conn_id,
147 template SCCP_PAR_Reason reason,
148 template PDU_BSSAP_LE bssap := omit) := {
149 respondingAddress := omit,
150 reason := reason,
151 userData := bssap,
152 connectionId := conn_id,
153 importance := omit
154}
155
156
157type record BSSAP_LE_N_DISCONNECT_ind
158{
159 SCCP_PAR_Originator originator ,
160 SCCP_PAR_Address respondingAddress optional ,
161 SCCP_PAR_Reason reason ,
162 PDU_BSSAP_LE userData optional ,
163 SCCP_PAR_Connection_Id connectionId optional ,
164 SCCP_PAR_Importance importance optional
165}
166
167template BSSAP_LE_N_DISCONNECT_ind tr_BSSAP_LE_DISC_ind(template SCCP_PAR_Connection_Id conn_id,
168 template SCCP_PAR_Originator originator,
169 template SCCP_PAR_Reason reason,
170 template PDU_BSSAP_LE bssap := *) := {
171 originator := originator,
172 respondingAddress:= *,
173 reason := reason,
174 userData := bssap,
175 connectionId := conn_id,
176 importance := *
177}
178
179type record BSSAP_LE_N_UNITDATA_req
180{
181 SCCP_PAR_Address calledAddress ,
182 SCCP_PAR_Address callingAddress ,
183 SCCP_PAR_Sequence_Control sequenceControl optional ,
184 SCCP_PAR_Return_Option returnOption optional ,
185 PDU_BSSAP_LE userData ,
186 SCCP_PAR_Importance importance optional
187 }
188
189template BSSAP_LE_N_UNITDATA_req ts_BSSAP_LE_UNITDATA_req(SCCP_PAR_Address called, SCCP_PAR_Address calling, template PDU_BSSAP_LE payload) := {
190 calledAddress := called,
191 callingAddress := calling,
192 sequenceControl := omit,
193 returnOption := omit,
194 userData := payload,
195 importance := omit
196}
197
198type record BSSAP_LE_N_UNITDATA_ind
199{
200 SCCP_PAR_Address calledAddress ,
201 SCCP_PAR_Address callingAddress ,
202 SCCP_PAR_Sequence_Control sequenceControl optional ,
203 SCCP_PAR_Return_Option returnOption optional ,
204 PDU_BSSAP_LE userData ,
205 SCCP_PAR_Importance importance optional
206}
207
208template BSSAP_LE_N_UNITDATA_ind tr_BSSAP_LE_UNITDATA_ind(template SCCP_PAR_Address called, template SCCP_PAR_Address calling, template PDU_BSSAP_LE payload) := {
209 calledAddress := called,
210 callingAddress := calling,
211 sequenceControl := *,
212 returnOption := *,
213 userData := payload,
214 importance := *
215}
216
217type record BSSAP_LE_N_NOTICE_ind
218{
219 SCCP_PAR_Address calledAddress ,
220 SCCP_PAR_Address callingAddress ,
221 SCCP_PAR_Reason_For_Return reasonForReturn ,
222 PDU_BSSAP_LE userData ,
223 SCCP_PAR_Importance importance optional
224}
225
226
227
228private function f_dec_ConnectInd(in ASP_SCCP_N_CONNECT_ind pin, out BSSAP_LE_N_CONNECT_ind pout) {
229 pout.calledAddress := pin.calledAddress;
230 pout.callingAddress := pin.callingAddress;
231 pout.qualityOfService := pin.qualityOfService;
232 if (ispresent(pin.userData)) {
233 pout.userData := dec_PDU_BSSAP_LE(pin.userData);
234 } else {
235 pout.userData := omit;
236 }
237 pout.connectionId := pin.connectionId;
238 pout.importance := pin.importance;
239} with {extension "prototype(fast)" }
240
241private function f_dec_ConnectCfm(in ASP_SCCP_N_CONNECT_cfm pin, out BSSAP_LE_N_CONNECT_cfm pout) {
242 pout.respondingAddress := pin.respondingAddress;
243 pout.qualityOfService := pin.qualityOfService;
244 if (ispresent(pin.userData)) {
245 pout.userData := dec_PDU_BSSAP_LE(pin.userData);
246 } else {
247 pout.userData := omit;
248 }
249 pout.connectionId := pin.connectionId;
250 pout.importance := pin.importance;
251} with {extension "prototype(fast)" }
252
253private function f_dec_DataInd(in ASP_SCCP_N_DATA_ind pin, out BSSAP_LE_N_DATA_ind pout) {
254 pout.userData := dec_PDU_BSSAP_LE(pin.userData);
255 pout.connectionId := pin.connectionId;
256 pout.importance := pin.importance;
257} with {extension "prototype(fast)" }
258
259private function f_dec_DisconnectInd(in ASP_SCCP_N_DISCONNECT_ind pin, out BSSAP_LE_N_DISCONNECT_ind pout) {
260 pout.originator := pin.originator;
261 pout.respondingAddress := pin.respondingAddress;
262 pout.reason := pin.reason;
263 if (ispresent(pin.userData)) {
264 pout.userData := dec_PDU_BSSAP_LE(pin.userData);
265 } else {
266 pout.userData := omit;
267 }
268 pout.connectionId := pin.connectionId;
269 pout.importance := pin.importance;
270} with {extension "prototype(fast)" }
271
272private function f_dec_UnitdataInd(in ASP_SCCP_N_UNITDATA_ind pin, out BSSAP_LE_N_UNITDATA_ind pout) {
273 pout.calledAddress := pin.calledAddress;
274 pout.callingAddress := pin.callingAddress;
275 pout.sequenceControl := pin.sequenceControl;
276 pout.returnOption := pin.returnOption;
277 pout.userData := dec_PDU_BSSAP_LE(pin.userData);
278 pout.importance := pin.importance;
279} with {extension "prototype(fast)" }
280
281private function f_dec_NoticeInd(in ASP_SCCP_N_NOTICE_ind pin, out BSSAP_LE_N_NOTICE_ind pout) {
282 pout.calledAddress := pin.calledAddress;
283 pout.callingAddress := pin.callingAddress;
284 pout.reasonForReturn := pin.reasonForReturn;
285 pout.userData := dec_PDU_BSSAP_LE(pin.userData);
286 pout.importance := pin.importance;
287} with {extension "prototype(fast)" }
288
289
290
291private function f_enc_ConnectReq(in BSSAP_LE_N_CONNECT_req pin, out ASP_SCCP_N_CONNECT_req pout) {
292 pout.calledAddress := pin.calledAddress;
293 pout.callingAddress := pin.callingAddress;
294 pout.expeditedDataSel := pin.expeditedDataSel;
295 pout.qualityOfService := pin.qualityOfService;
296 if (ispresent(pin.userData)) {
297 pout.userData := enc_PDU_BSSAP_LE(pin.userData);
298 } else {
299 pout.userData := omit;
300 }
301 pout.connectionId := pin.connectionId;
302 pout.importance := pin.importance;
303} with {extension "prototype(fast)" }
304
305private function f_enc_ConnectRes(in BSSAP_LE_N_CONNECT_res pin, out ASP_SCCP_N_CONNECT_res pout) {
306 pout.respondingAddress := pin.respondingAddress;
307 pout.expeditedDataSel := pin.expeditedDataSel;
308 pout.qualityOfService := pin.qualityOfService;
309 if (ispresent(pin.userData)) {
310 pout.userData := enc_PDU_BSSAP_LE(pin.userData);
311 } else {
312 pout.userData := omit;
313 }
314 pout.connectionId := pin.connectionId;
315 pout.importance := pin.importance;
316} with {extension "prototype(fast)" }
317
318private function f_enc_DataReq(in BSSAP_LE_N_DATA_req pin, out ASP_SCCP_N_DATA_req pout) {
319 pout.userData := enc_PDU_BSSAP_LE(pin.userData);
320 pout.connectionId := pin.connectionId;
321 pout.importance := pin.importance;
322} with {extension "prototype(fast)" }
323
324private function f_enc_DisconnectReq(in BSSAP_LE_N_DISCONNECT_req pin, out ASP_SCCP_N_DISCONNECT_req pout) {
325 pout.respondingAddress := pin.respondingAddress;
326 pout.reason := pin.reason;
327 if (ispresent(pin.userData)) {
328 pout.userData := enc_PDU_BSSAP_LE(pin.userData);
329 } else {
330 pout.userData := omit;
331 }
332 pout.connectionId := pin.connectionId;
333 pout.importance := pin.importance;
334} with {extension "prototype(fast)" }
335
336private function f_enc_UnitdataReq(in BSSAP_LE_N_UNITDATA_req pin, out ASP_SCCP_N_UNITDATA_req pout) {
337 pout.calledAddress := pin.calledAddress;
338 pout.callingAddress := pin.callingAddress;
339 pout.userData := enc_PDU_BSSAP_LE(pin.userData);
340 pout.sequenceControl := pin.sequenceControl;
341 pout.returnOption := pin.returnOption;
342 pout.importance := pin.importance;
343} with {extension "prototype(fast)" }
344
345type port BSSAP_LE_CODEC_PT message {
346 out BSSAP_LE_N_CONNECT_req,
347 BSSAP_LE_N_CONNECT_res,
348 BSSAP_LE_N_DATA_req,
349 BSSAP_LE_N_DISCONNECT_req,
350 BSSAP_LE_N_UNITDATA_req,
351 ASP_SCCP_N_RESET_req;
352 in BSSAP_LE_N_CONNECT_ind,
353 BSSAP_LE_N_CONNECT_cfm,
354 BSSAP_LE_N_DATA_ind,
355 BSSAP_LE_N_DISCONNECT_ind,
356 BSSAP_LE_N_UNITDATA_ind,
357 BSSAP_LE_N_NOTICE_ind,
358 ASP_SCCP_N_RESET_ind,
359 ASP_SCCP_N_RESET_cfm,
360 ASP_SCCP_N_STATE_ind;
361} with { extension "internal user SCCPasp_PT
362 out(BSSAP_LE_N_CONNECT_req -> ASP_SCCP_N_CONNECT_req: function(f_enc_ConnectReq);
363 BSSAP_LE_N_CONNECT_res -> ASP_SCCP_N_CONNECT_res: function(f_enc_ConnectRes);
364 BSSAP_LE_N_DATA_req -> ASP_SCCP_N_DATA_req: function(f_enc_DataReq);
365 BSSAP_LE_N_DISCONNECT_req -> ASP_SCCP_N_DISCONNECT_req: function(f_enc_DisconnectReq);
366 BSSAP_LE_N_UNITDATA_req -> ASP_SCCP_N_UNITDATA_req: function(f_enc_UnitdataReq);
367 ASP_SCCP_N_RESET_req -> ASP_SCCP_N_RESET_req: simple)
368 in(ASP_SCCP_N_CONNECT_ind -> BSSAP_LE_N_CONNECT_ind: function(f_dec_ConnectInd);
369 ASP_SCCP_N_CONNECT_cfm -> BSSAP_LE_N_CONNECT_cfm: function(f_dec_ConnectCfm);
370 ASP_SCCP_N_DATA_ind -> BSSAP_LE_N_DATA_ind: function(f_dec_DataInd);
371 ASP_SCCP_N_DISCONNECT_ind -> BSSAP_LE_N_DISCONNECT_ind: function(f_dec_DisconnectInd);
372 ASP_SCCP_N_UNITDATA_ind -> BSSAP_LE_N_UNITDATA_ind: function(f_dec_UnitdataInd);
373 ASP_SCCP_N_NOTICE_ind -> BSSAP_LE_N_NOTICE_ind: function(f_dec_NoticeInd);
374 ASP_SCCP_N_RESET_ind -> ASP_SCCP_N_RESET_ind: simple;
375 ASP_SCCP_N_RESET_cfm -> ASP_SCCP_N_RESET_cfm: simple;
376 ASP_SCCP_N_STATE_ind -> ASP_SCCP_N_STATE_ind: simple)"
377}
378
379
380}