blob: f56bfc90949b168e6457579823cd7b8b2259f304 [file] [log] [blame]
Pau Espin Pedrola6bbb8c2021-11-24 17:00:03 +01001/* Osmocom HNBLL Interface Templates, as per osmo-hnodeb/include/osmocom/hnodeb/hnb_prim.h
2 * (C) 2021 by sysmocom - s.f.m.c. GmbH <info@sysmocom.de>
3 * All rights reserved.
4 * Author: Pau Espin Pedrol <pespin@sysmocom.de>
5 *
6 * Released under the terms of GNU General Public License, Version 2 or
7 * (at your option) any later version.
8 *
9 * SPDX-License-Identifier: GPL-2.0-or-later
10 */
11
12module HNBLLIF_Templates {
13
14import from General_Types all;
15import from Osmocom_Types all;
16import from HNBLLIF_Types all;
17
18/**********************
19 * CTL SAPI
20 **********************/
21template (value) HNBLLIF_Message ts_HNBLLIF_CTL_HELLO_REQ(template (value) HNBLLIF_Sapi sapi,
22 template (value) uint16_t api_version) := {
23 sapi := HNBLL_IF_SAPI_CTL,
24 u := {
25 ctl := {
26 prim := HNBLL_IF_CTL_MSG_HELLO,
27 u := {
28 hello := {
29 op := HNBLL_IF_OP_REQUEST,
30 u := {
31 req := {
32 sapi := sapi,
33 api_version := api_version
34 }
35 }
36 }
37 }
38 }
39 }
40}
41
42template (present) HNBLLIF_Message tr_HNBLLIF_CTL_HELLO_CNF(template (present) HNBLLIF_Sapi sapi := ?,
43 template (present) uint32_t api_version := ?) := {
44 sapi := HNBLL_IF_SAPI_CTL,
45 u := {
46 ctl := {
47 prim := HNBLL_IF_CTL_MSG_HELLO,
48 u := {
49 hello := {
50 op := HNBLL_IF_OP_CONFIRM,
51 u := {
52 cnf := {
53 sapi := sapi,
54 api_version := api_version
55 }
56 }
57 }
58 }
59 }
60 }
61}
62
63
64/**********************
65 * IUH SAPI
66 **********************/
67
68template (present) HNBLLIF_Message tr_HNBLLIF_IUH_CONFIGURE_IND(template (present) uint16_t mcc := ?,
69 template (present) uint16_t mnc := ?,
70 template (present) uint16_t cell_identity := ?,
71 template (present) uint16_t lac := ?,
72 template (present) uint8_t rac := ?,
73 template (present) uint16_t sac := ?,
74 template (present) uint16_t rnc_id := ?) := {
75 sapi := HNBLL_IF_SAPI_IUH,
76 u := {
77 iuh := {
78 prim := HNBLL_IF_IUH_MSG_CONFIGURE,
79 u := {
80 configure := {
81 op := HNBLL_IF_OP_INDICATION,
82 u := {
83 ind := {
84 mcc := mcc,
85 mnc := mnc,
86 cell_identity := cell_identity,
87 lac := lac,
88 rac := rac,
89 reserved := ?,
90 sac := sac,
91 rnc_id := rnc_id
92 }
93 }
94 }
95 }
96 }
97 }
98}
99
100template (value) HNBLLIF_Message ts_HNBLLIF_IUH_CONN_ESTABLISH_REQ(template (value) uint32_t context_id,
101 template (value) uint8_t domain,
102 template (value) uint8_t est_cause,
103 template (value) octetstring data) := {
104 sapi := HNBLL_IF_SAPI_IUH,
105 u := {
106 iuh := {
107 prim := HNBLL_IF_IUH_MSG_CONN_ESTABLISH,
108 u := {
109 conn_establish := {
110 op := HNBLL_IF_OP_REQUEST,
111 u := {
112 req := {
113 context_id := context_id,
114 domain := domain,
115 est_cause := est_cause,
116 reserved := 0,
117 data_len := lengthof(data),
118 data := data
119 }
120 }
121 }
122 }
123 }
124 }
125}
126
127template (present) HNBLLIF_Message tr_HNBLLIF_IUH_CONN_ESTABLISH_CNF(template (present) uint32_t context_id := ?,
128 template (present) uint8_t domain := ?,
129 template (present) uint8_t est_cause := ?) := {
130 sapi := HNBLL_IF_SAPI_IUH,
131 u := {
132 iuh := {
133 prim := HNBLL_IF_IUH_MSG_CONN_ESTABLISH,
134 u := {
135 conn_establish := {
136 op := HNBLL_IF_OP_CONFIRM,
137 u := {
138 cnf := {
139 context_id := context_id,
140 domain := domain,
141 est_cause := est_cause
142 }
143 }
144 }
145 }
146 }
147 }
148}
149
150template (value) HNBLLIF_Message ts_HNBLLIF_IUH_CONN_RELEASE_REQ(template (value) uint32_t context_id,
151 template (value) uint8_t domain,
152 template (value) uint8_t cause_type,
153 template (value) uint8_t cause,
154 template (value) octetstring data) := {
155 sapi := HNBLL_IF_SAPI_IUH,
156 u := {
157 iuh := {
158 prim := HNBLL_IF_IUH_MSG_CONN_RELEASE,
159 u := {
160 conn_release := {
161 op := HNBLL_IF_OP_REQUEST,
162 u := {
163 req := {
164 context_id := context_id,
165 domain := domain,
166 spare1 := 0,
167 cause_type := cause_type,
168 cause := cause,
169 data_len := lengthof(data),
170 data := data
171 }
172 }
173 }
174 }
175 }
176 }
177}
178
179template (present) HNBLLIF_Message tr_HNBLLIF_IUH_CONN_DATA_IND(template (present) uint32_t context_id := ?,
180 template (present) uint8_t domain := ?,
181 template (present) octetstring data := ?) := {
182 sapi := HNBLL_IF_SAPI_IUH,
183 u := {
184 iuh := {
185 prim := HNBLL_IF_IUH_MSG_CONN_DATA,
186 u := {
187 conn_data := {
188 op := HNBLL_IF_OP_INDICATION,
189 u := {
190 ind := {
191 context_id := context_id,
192 domain := domain,
193 spare1 := ?,
194 spare2 := ?,
195 data_len := ?,
196 data := data
197 }
198 }
199 }
200 }
201 }
202 }
203}
204
205template (value) HNBLLIF_Message ts_HNBLLIF_IUH_CONN_DATA_REQ(template (value) uint32_t context_id,
206 template (value) uint8_t domain,
207 template (value) octetstring data) := {
208 sapi := HNBLL_IF_SAPI_IUH,
209 u := {
210 iuh := {
211 prim := HNBLL_IF_IUH_MSG_CONN_DATA,
212 u := {
213 conn_data := {
214 op := HNBLL_IF_OP_REQUEST,
215 u := {
216 req := {
217 context_id := context_id,
218 domain := domain,
219 spare1 := 0,
220 spare2 := 0,
221 data_len := lengthof(data),
222 data := data
223 }
224 }
225 }
226 }
227 }
228 }
229}
230
231template (present) HNBLLIF_Message tr_HNBLLIF_IUH_UNITDATA_IND(template (present) octetstring data := ?) := {
232 sapi := HNBLL_IF_SAPI_IUH,
233 u := {
234 iuh := {
235 prim := HNBLL_IF_IUH_MSG_UNITDATA,
236 u := {
237 unitdata := {
238 op := HNBLL_IF_OP_INDICATION,
239 u := {
240 ind := {
241 data_len := ?,
242 data := data
243 }
244 }
245 }
246 }
247 }
248 }
249}
250
Pau Espin Pedrol32fb54e2021-11-29 16:21:26 +0100251/**********************
252 * AUDIO SAPI
253 **********************/
Pau Espin Pedrol58a69df2021-12-21 14:48:23 +0100254const HNBLLIF_AUDIO_IPTIs IPTIs_default := {
255 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
256 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
257 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
258 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
259};
260
261private function f_subflow_sizes_default() return HNBLLIF_AUDIO_SubflowSizes
262{
263 var HNBLLIF_AUDIO_SubflowSizes ss;
264
265 for (var integer i := 0; i < HNBLLIF_MAX_RFCIS; i := i + 1) {
266 for (var integer j := 0; j < HNBLLIF_MAX_SUBFLOWS; j := j + 1) {
267 ss[i][j] := 0;
268 }
269 }
270
271 ss[0][0] := 81; ss[0][1] := 103; ss[0][2] := 60;
272 ss[1][0] := 39; ss[1][1] := 0; ss[1][2] := 0;
273 ss[2][0] := 0; ss[2][1] := 0; ss[2][2] := 0;
274
275 return ss;
276}
Pau Espin Pedrol32fb54e2021-11-29 16:21:26 +0100277
Pau Espin Pedrol47590742022-06-09 11:52:21 +0200278private function f_rfcis_default() return HNBLLIF_AUDIO_RFCIs
279{
280 var HNBLLIF_AUDIO_RFCIs rfcis;
281
282 for (var integer i := 0; i < HNBLLIF_MAX_RFCIS; i := i + 1) {
283 rfcis[i] := i;
284 }
285
286 return rfcis;
287}
288
Pau Espin Pedrol32fb54e2021-11-29 16:21:26 +0100289template (value) HNBLLIF_Message ts_HNBLLIF_AUDIO_CONN_ESTABLISH_REQ(template (value) uint32_t context_id,
290 template (value) uint16_t remote_rtp_port,
291 template (value) HNBLLIF_AddrType remote_rtp_address_type,
Pau Espin Pedrol58a69df2021-12-21 14:48:23 +0100292 template (value) HNBLLIF_Addr remote_addr,
293 template (value) uint8_t transparent := 0,
294 template (value) uint8_t data_pdu_type := 0,
295 template (value) uint16_t supported_versions_mask := 3,
296 template (value) uint8_t num_rfci := 3,
297 template (value) uint8_t num_subflows := 3,
298 template (value) HNBLLIF_AUDIO_SubflowSizes subflow_sizes := f_subflow_sizes_default(),
299 template (value) uint8_t IPTIs_present := 0,
Pau Espin Pedrol47590742022-06-09 11:52:21 +0200300 template (value) HNBLLIF_AUDIO_IPTIs IPTIs := IPTIs_default,
301 template (omit) HNBLLIF_AUDIO_RFCIs rfci := f_rfcis_default()) := {
Pau Espin Pedrol32fb54e2021-11-29 16:21:26 +0100302 sapi := HNBLL_IF_SAPI_AUDIO,
303 u := {
304 audio := {
305 prim := HNBLL_IF_AUDIO_MSG_CONN_ESTABLISH,
306 u := {
307 conn_establish := {
308 op := HNBLL_IF_OP_REQUEST,
309 u := {
310 req := {
311 context_id := context_id,
312 remote_rtp_port := remote_rtp_port,
313 reserved := 0,
314 remote_rtp_address_type := remote_rtp_address_type,
Pau Espin Pedrol58a69df2021-12-21 14:48:23 +0100315 remote_addr := remote_addr,
316 transparent := transparent,
317 data_pdu_type := data_pdu_type,
318 supported_versions_mask := supported_versions_mask,
319 num_rfci := num_rfci,
320 num_subflows := num_subflows,
321 subflow_sizes := subflow_sizes,
322 IPTIs_present := IPTIs_present,
Pau Espin Pedrol47590742022-06-09 11:52:21 +0200323 IPTIs := IPTIs,
324 rfci := rfci
Pau Espin Pedrol32fb54e2021-11-29 16:21:26 +0100325 }
326 }
327 }
328 }
329 }
330 }
331}
332
333template (present) HNBLLIF_Message tr_HNBLLIF_AUDIO_CONN_ESTABLISH_CNF(template (present) uint32_t context_id := ?,
Pau Espin Pedrol25142452021-12-14 18:43:46 +0100334 template (present) uint32_t audio_conn_id := ?,
Pau Espin Pedrol32fb54e2021-11-29 16:21:26 +0100335 template (present) uint8_t error_code := ?,
336 template (present) uint16_t local_rtp_port:= ?,
337 template (present) HNBLLIF_AddrType local_rtp_address_type := ?,
338 template (present) HNBLLIF_Addr local_addr := ?) := {
339 sapi := HNBLL_IF_SAPI_AUDIO,
340 u := {
341 audio := {
342 prim := HNBLL_IF_AUDIO_MSG_CONN_ESTABLISH,
343 u := {
344 conn_establish := {
345 op := HNBLL_IF_OP_CONFIRM,
346 u := {
347 cnf := {
348 context_id := context_id,
Pau Espin Pedrol25142452021-12-14 18:43:46 +0100349 audio_conn_id := audio_conn_id,
Pau Espin Pedrol32fb54e2021-11-29 16:21:26 +0100350 local_rtp_port := local_rtp_port,
351 error_code := error_code,
352 local_rtp_address_type := local_rtp_address_type,
353 local_addr := local_addr
354 }
355 }
356 }
357 }
358 }
359 }
360}
361
Pau Espin Pedrol25142452021-12-14 18:43:46 +0100362template (value) HNBLLIF_Message ts_HNBLLIF_AUDIO_CONN_RELEASE_REQ(template (value) uint32_t audio_conn_id) := {
Pau Espin Pedrol32fb54e2021-11-29 16:21:26 +0100363 sapi := HNBLL_IF_SAPI_AUDIO,
364 u := {
365 audio := {
366 prim := HNBLL_IF_AUDIO_MSG_CONN_RELEASE,
367 u := {
368 conn_release := {
369 op := HNBLL_IF_OP_REQUEST,
370 u := {
371 req := {
Pau Espin Pedrol25142452021-12-14 18:43:46 +0100372 audio_conn_id := audio_conn_id
Pau Espin Pedrol32fb54e2021-11-29 16:21:26 +0100373 }
374 }
375 }
376 }
377 }
378 }
379}
380
Pau Espin Pedrol25142452021-12-14 18:43:46 +0100381template (present) HNBLLIF_Message tr_HNBLLIF_AUDIO_CONN_DATA_IND(template (present) uint32_t audio_conn_id := ?,
Pau Espin Pedrol58a69df2021-12-21 14:48:23 +0100382 template (present) uint8_t frame_nr := ?,
383 template (present) uint8_t fqc := ?,
384 template (present) uint8_t rfci := ?,
385 template (present) octetstring data := ?) := {
Pau Espin Pedrol32fb54e2021-11-29 16:21:26 +0100386 sapi := HNBLL_IF_SAPI_AUDIO,
387 u := {
388 audio := {
389 prim := HNBLL_IF_AUDIO_MSG_CONN_DATA,
390 u := {
391 conn_data := {
392 op := HNBLL_IF_OP_INDICATION,
393 u := {
394 ind := {
Pau Espin Pedrol25142452021-12-14 18:43:46 +0100395 audio_conn_id := audio_conn_id,
Pau Espin Pedrol58a69df2021-12-21 14:48:23 +0100396 frame_nr := frame_nr,
397 fqc := fqc,
398 rfci := rfci,
399 spare := 0,
Pau Espin Pedrol32fb54e2021-11-29 16:21:26 +0100400 data_len := ?,
401 data := data
402 }
403 }
404 }
405 }
406 }
407 }
408}
409
Pau Espin Pedrol25142452021-12-14 18:43:46 +0100410template (value) HNBLLIF_Message ts_HNBLLIF_AUDIO_CONN_DATA_REQ(template (value) uint32_t audio_conn_id,
Pau Espin Pedrol58a69df2021-12-21 14:48:23 +0100411 template (value) uint8_t frame_nr,
412 template (value) uint8_t fqc,
413 template (value) uint8_t rfci,
Pau Espin Pedrol32fb54e2021-11-29 16:21:26 +0100414 template (value) octetstring data) := {
415 sapi := HNBLL_IF_SAPI_AUDIO,
416 u := {
417 audio := {
418 prim := HNBLL_IF_AUDIO_MSG_CONN_DATA,
419 u := {
420 conn_data := {
421 op := HNBLL_IF_OP_REQUEST,
422 u := {
423 req := {
Pau Espin Pedrol25142452021-12-14 18:43:46 +0100424 audio_conn_id := audio_conn_id,
Pau Espin Pedrol58a69df2021-12-21 14:48:23 +0100425 frame_nr := frame_nr,
426 fqc := fqc,
427 rfci := rfci,
428 spare := 0,
Pau Espin Pedrol32fb54e2021-11-29 16:21:26 +0100429 data_len := lengthof(data),
430 data := data
431 }
432 }
433 }
434 }
435 }
436 }
437}
Pau Espin Pedrol9e183722021-12-02 20:12:25 +0100438
439
440/**********************
441 * GTP SAPI
442 **********************/
443template (value) HNBLLIF_Message ts_HNBLLIF_GTP_CONN_ESTABLISH_REQ(template (value) uint32_t context_id,
444 template (value) uint32_t remote_tei,
445 template (value) HNBLLIF_AddrType remote_gtpu_address_type,
446 template (value) HNBLLIF_Addr remote_gtpu_addr) := {
447 sapi := HNBLL_IF_SAPI_GTP,
448 u := {
449 gtp := {
450 prim := HNBLL_IF_GTP_MSG_CONN_ESTABLISH,
451 u := {
452 conn_establish := {
453 op := HNBLL_IF_OP_REQUEST,
454 u := {
455 req := {
456 context_id := context_id,
457 remote_tei := remote_tei,
458 reserved := 0,
459 remote_gtpu_address_type := remote_gtpu_address_type,
460 remote_gtpu_addr := remote_gtpu_addr
461 }
462 }
463 }
464 }
465 }
466 }
467}
468
469template (present) HNBLLIF_Message tr_HNBLLIF_GTP_CONN_ESTABLISH_CNF(template (present) uint32_t context_id := ?,
Pau Espin Pedrol25142452021-12-14 18:43:46 +0100470 template (present) uint32_t gtp_conn_id := ?,
Pau Espin Pedrol9e183722021-12-02 20:12:25 +0100471 template (present) uint32_t local_tei := ?,
472 template (present) uint8_t error_code := ?,
473 template (present) HNBLLIF_AddrType local_gtpu_address_type := ?,
474 template (present) HNBLLIF_Addr local_gtpu_addr := ?) := {
475 sapi := HNBLL_IF_SAPI_GTP,
476 u := {
477 gtp := {
478 prim := HNBLL_IF_GTP_MSG_CONN_ESTABLISH,
479 u := {
480 conn_establish := {
481 op := HNBLL_IF_OP_CONFIRM,
482 u := {
483 cnf := {
484 context_id := context_id,
Pau Espin Pedrol25142452021-12-14 18:43:46 +0100485 gtp_conn_id := gtp_conn_id,
Pau Espin Pedrol9e183722021-12-02 20:12:25 +0100486 local_tei := local_tei,
487 error_code := error_code,
488 local_gtpu_address_type := local_gtpu_address_type,
489 local_gtpu_addr := local_gtpu_addr
490 }
491 }
492 }
493 }
494 }
495 }
496}
497
Pau Espin Pedrol25142452021-12-14 18:43:46 +0100498template (value) HNBLLIF_Message ts_HNBLLIF_GTP_CONN_RELEASE_REQ(template (value) uint32_t gtp_conn_id) := {
Pau Espin Pedrol9e183722021-12-02 20:12:25 +0100499 sapi := HNBLL_IF_SAPI_GTP,
500 u := {
501 gtp := {
502 prim := HNBLL_IF_GTP_MSG_CONN_RELEASE,
503 u := {
504 conn_release := {
505 op := HNBLL_IF_OP_REQUEST,
506 u := {
507 req := {
Pau Espin Pedrol25142452021-12-14 18:43:46 +0100508 gtp_conn_id := gtp_conn_id
Pau Espin Pedrol9e183722021-12-02 20:12:25 +0100509 }
510 }
511 }
512 }
513 }
514 }
515}
516
Pau Espin Pedrol25142452021-12-14 18:43:46 +0100517template (present) HNBLLIF_Message tr_HNBLLIF_GTP_CONN_DATA_IND(template (present) uint32_t gtp_conn_id,
Pau Espin Pedrol9e183722021-12-02 20:12:25 +0100518 template (present) octetstring data := ?) := {
519 sapi := HNBLL_IF_SAPI_GTP,
520 u := {
521 gtp := {
522 prim := HNBLL_IF_GTP_MSG_CONN_DATA,
523 u := {
524 conn_data := {
525 op := HNBLL_IF_OP_INDICATION,
526 u := {
527 ind := {
Pau Espin Pedrol25142452021-12-14 18:43:46 +0100528 gtp_conn_id := gtp_conn_id,
Pau Espin Pedrol9e183722021-12-02 20:12:25 +0100529 data_len := ?,
530 data := data
531 }
532 }
533 }
534 }
535 }
536 }
537}
538
Pau Espin Pedrol25142452021-12-14 18:43:46 +0100539template (value) HNBLLIF_Message ts_HNBLLIF_GTP_CONN_DATA_REQ(template (value) uint32_t gtp_conn_id,
Pau Espin Pedrol9e183722021-12-02 20:12:25 +0100540 template (value) octetstring data) := {
541 sapi := HNBLL_IF_SAPI_GTP,
542 u := {
543 gtp := {
544 prim := HNBLL_IF_GTP_MSG_CONN_DATA,
545 u := {
546 conn_data := {
547 op := HNBLL_IF_OP_REQUEST,
548 u := {
549 req := {
Pau Espin Pedrol25142452021-12-14 18:43:46 +0100550 gtp_conn_id := gtp_conn_id,
Pau Espin Pedrol9e183722021-12-02 20:12:25 +0100551 data_len := lengthof(data),
552 data := data
553 }
554 }
555 }
556 }
557 }
558 }
559}
560
Pau Espin Pedrola6bbb8c2021-11-24 17:00:03 +0100561} with { encode "RAW" variant "BYTEORDER(first)" };