blob: 6aee65980bf4ba785cab9d5cf5159ab7b329cc7d [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
278template (value) HNBLLIF_Message ts_HNBLLIF_AUDIO_CONN_ESTABLISH_REQ(template (value) uint32_t context_id,
279 template (value) uint16_t remote_rtp_port,
280 template (value) HNBLLIF_AddrType remote_rtp_address_type,
Pau Espin Pedrol58a69df2021-12-21 14:48:23 +0100281 template (value) HNBLLIF_Addr remote_addr,
282 template (value) uint8_t transparent := 0,
283 template (value) uint8_t data_pdu_type := 0,
284 template (value) uint16_t supported_versions_mask := 3,
285 template (value) uint8_t num_rfci := 3,
286 template (value) uint8_t num_subflows := 3,
287 template (value) HNBLLIF_AUDIO_SubflowSizes subflow_sizes := f_subflow_sizes_default(),
288 template (value) uint8_t IPTIs_present := 0,
289 template (value) HNBLLIF_AUDIO_IPTIs IPTIs := IPTIs_default) := {
Pau Espin Pedrol32fb54e2021-11-29 16:21:26 +0100290 sapi := HNBLL_IF_SAPI_AUDIO,
291 u := {
292 audio := {
293 prim := HNBLL_IF_AUDIO_MSG_CONN_ESTABLISH,
294 u := {
295 conn_establish := {
296 op := HNBLL_IF_OP_REQUEST,
297 u := {
298 req := {
299 context_id := context_id,
300 remote_rtp_port := remote_rtp_port,
301 reserved := 0,
302 remote_rtp_address_type := remote_rtp_address_type,
Pau Espin Pedrol58a69df2021-12-21 14:48:23 +0100303 remote_addr := remote_addr,
304 transparent := transparent,
305 data_pdu_type := data_pdu_type,
306 supported_versions_mask := supported_versions_mask,
307 num_rfci := num_rfci,
308 num_subflows := num_subflows,
309 subflow_sizes := subflow_sizes,
310 IPTIs_present := IPTIs_present,
311 IPTIs := IPTIs
Pau Espin Pedrol32fb54e2021-11-29 16:21:26 +0100312 }
313 }
314 }
315 }
316 }
317 }
318}
319
320template (present) HNBLLIF_Message tr_HNBLLIF_AUDIO_CONN_ESTABLISH_CNF(template (present) uint32_t context_id := ?,
Pau Espin Pedrol25142452021-12-14 18:43:46 +0100321 template (present) uint32_t audio_conn_id := ?,
Pau Espin Pedrol32fb54e2021-11-29 16:21:26 +0100322 template (present) uint8_t error_code := ?,
323 template (present) uint16_t local_rtp_port:= ?,
324 template (present) HNBLLIF_AddrType local_rtp_address_type := ?,
325 template (present) HNBLLIF_Addr local_addr := ?) := {
326 sapi := HNBLL_IF_SAPI_AUDIO,
327 u := {
328 audio := {
329 prim := HNBLL_IF_AUDIO_MSG_CONN_ESTABLISH,
330 u := {
331 conn_establish := {
332 op := HNBLL_IF_OP_CONFIRM,
333 u := {
334 cnf := {
335 context_id := context_id,
Pau Espin Pedrol25142452021-12-14 18:43:46 +0100336 audio_conn_id := audio_conn_id,
Pau Espin Pedrol32fb54e2021-11-29 16:21:26 +0100337 local_rtp_port := local_rtp_port,
338 error_code := error_code,
339 local_rtp_address_type := local_rtp_address_type,
340 local_addr := local_addr
341 }
342 }
343 }
344 }
345 }
346 }
347}
348
Pau Espin Pedrol25142452021-12-14 18:43:46 +0100349template (value) HNBLLIF_Message ts_HNBLLIF_AUDIO_CONN_RELEASE_REQ(template (value) uint32_t audio_conn_id) := {
Pau Espin Pedrol32fb54e2021-11-29 16:21:26 +0100350 sapi := HNBLL_IF_SAPI_AUDIO,
351 u := {
352 audio := {
353 prim := HNBLL_IF_AUDIO_MSG_CONN_RELEASE,
354 u := {
355 conn_release := {
356 op := HNBLL_IF_OP_REQUEST,
357 u := {
358 req := {
Pau Espin Pedrol25142452021-12-14 18:43:46 +0100359 audio_conn_id := audio_conn_id
Pau Espin Pedrol32fb54e2021-11-29 16:21:26 +0100360 }
361 }
362 }
363 }
364 }
365 }
366}
367
Pau Espin Pedrol25142452021-12-14 18:43:46 +0100368template (present) HNBLLIF_Message tr_HNBLLIF_AUDIO_CONN_DATA_IND(template (present) uint32_t audio_conn_id := ?,
Pau Espin Pedrol58a69df2021-12-21 14:48:23 +0100369 template (present) uint8_t frame_nr := ?,
370 template (present) uint8_t fqc := ?,
371 template (present) uint8_t rfci := ?,
372 template (present) octetstring data := ?) := {
Pau Espin Pedrol32fb54e2021-11-29 16:21:26 +0100373 sapi := HNBLL_IF_SAPI_AUDIO,
374 u := {
375 audio := {
376 prim := HNBLL_IF_AUDIO_MSG_CONN_DATA,
377 u := {
378 conn_data := {
379 op := HNBLL_IF_OP_INDICATION,
380 u := {
381 ind := {
Pau Espin Pedrol25142452021-12-14 18:43:46 +0100382 audio_conn_id := audio_conn_id,
Pau Espin Pedrol58a69df2021-12-21 14:48:23 +0100383 frame_nr := frame_nr,
384 fqc := fqc,
385 rfci := rfci,
386 spare := 0,
Pau Espin Pedrol32fb54e2021-11-29 16:21:26 +0100387 data_len := ?,
388 data := data
389 }
390 }
391 }
392 }
393 }
394 }
395}
396
Pau Espin Pedrol25142452021-12-14 18:43:46 +0100397template (value) HNBLLIF_Message ts_HNBLLIF_AUDIO_CONN_DATA_REQ(template (value) uint32_t audio_conn_id,
Pau Espin Pedrol58a69df2021-12-21 14:48:23 +0100398 template (value) uint8_t frame_nr,
399 template (value) uint8_t fqc,
400 template (value) uint8_t rfci,
Pau Espin Pedrol32fb54e2021-11-29 16:21:26 +0100401 template (value) octetstring data) := {
402 sapi := HNBLL_IF_SAPI_AUDIO,
403 u := {
404 audio := {
405 prim := HNBLL_IF_AUDIO_MSG_CONN_DATA,
406 u := {
407 conn_data := {
408 op := HNBLL_IF_OP_REQUEST,
409 u := {
410 req := {
Pau Espin Pedrol25142452021-12-14 18:43:46 +0100411 audio_conn_id := audio_conn_id,
Pau Espin Pedrol58a69df2021-12-21 14:48:23 +0100412 frame_nr := frame_nr,
413 fqc := fqc,
414 rfci := rfci,
415 spare := 0,
Pau Espin Pedrol32fb54e2021-11-29 16:21:26 +0100416 data_len := lengthof(data),
417 data := data
418 }
419 }
420 }
421 }
422 }
423 }
424}
Pau Espin Pedrol9e183722021-12-02 20:12:25 +0100425
426
427/**********************
428 * GTP SAPI
429 **********************/
430template (value) HNBLLIF_Message ts_HNBLLIF_GTP_CONN_ESTABLISH_REQ(template (value) uint32_t context_id,
431 template (value) uint32_t remote_tei,
432 template (value) HNBLLIF_AddrType remote_gtpu_address_type,
433 template (value) HNBLLIF_Addr remote_gtpu_addr) := {
434 sapi := HNBLL_IF_SAPI_GTP,
435 u := {
436 gtp := {
437 prim := HNBLL_IF_GTP_MSG_CONN_ESTABLISH,
438 u := {
439 conn_establish := {
440 op := HNBLL_IF_OP_REQUEST,
441 u := {
442 req := {
443 context_id := context_id,
444 remote_tei := remote_tei,
445 reserved := 0,
446 remote_gtpu_address_type := remote_gtpu_address_type,
447 remote_gtpu_addr := remote_gtpu_addr
448 }
449 }
450 }
451 }
452 }
453 }
454}
455
456template (present) HNBLLIF_Message tr_HNBLLIF_GTP_CONN_ESTABLISH_CNF(template (present) uint32_t context_id := ?,
Pau Espin Pedrol25142452021-12-14 18:43:46 +0100457 template (present) uint32_t gtp_conn_id := ?,
Pau Espin Pedrol9e183722021-12-02 20:12:25 +0100458 template (present) uint32_t local_tei := ?,
459 template (present) uint8_t error_code := ?,
460 template (present) HNBLLIF_AddrType local_gtpu_address_type := ?,
461 template (present) HNBLLIF_Addr local_gtpu_addr := ?) := {
462 sapi := HNBLL_IF_SAPI_GTP,
463 u := {
464 gtp := {
465 prim := HNBLL_IF_GTP_MSG_CONN_ESTABLISH,
466 u := {
467 conn_establish := {
468 op := HNBLL_IF_OP_CONFIRM,
469 u := {
470 cnf := {
471 context_id := context_id,
Pau Espin Pedrol25142452021-12-14 18:43:46 +0100472 gtp_conn_id := gtp_conn_id,
Pau Espin Pedrol9e183722021-12-02 20:12:25 +0100473 local_tei := local_tei,
474 error_code := error_code,
475 local_gtpu_address_type := local_gtpu_address_type,
476 local_gtpu_addr := local_gtpu_addr
477 }
478 }
479 }
480 }
481 }
482 }
483}
484
Pau Espin Pedrol25142452021-12-14 18:43:46 +0100485template (value) HNBLLIF_Message ts_HNBLLIF_GTP_CONN_RELEASE_REQ(template (value) uint32_t gtp_conn_id) := {
Pau Espin Pedrol9e183722021-12-02 20:12:25 +0100486 sapi := HNBLL_IF_SAPI_GTP,
487 u := {
488 gtp := {
489 prim := HNBLL_IF_GTP_MSG_CONN_RELEASE,
490 u := {
491 conn_release := {
492 op := HNBLL_IF_OP_REQUEST,
493 u := {
494 req := {
Pau Espin Pedrol25142452021-12-14 18:43:46 +0100495 gtp_conn_id := gtp_conn_id
Pau Espin Pedrol9e183722021-12-02 20:12:25 +0100496 }
497 }
498 }
499 }
500 }
501 }
502}
503
Pau Espin Pedrol25142452021-12-14 18:43:46 +0100504template (present) HNBLLIF_Message tr_HNBLLIF_GTP_CONN_DATA_IND(template (present) uint32_t gtp_conn_id,
Pau Espin Pedrol9e183722021-12-02 20:12:25 +0100505 template (present) octetstring data := ?) := {
506 sapi := HNBLL_IF_SAPI_GTP,
507 u := {
508 gtp := {
509 prim := HNBLL_IF_GTP_MSG_CONN_DATA,
510 u := {
511 conn_data := {
512 op := HNBLL_IF_OP_INDICATION,
513 u := {
514 ind := {
Pau Espin Pedrol25142452021-12-14 18:43:46 +0100515 gtp_conn_id := gtp_conn_id,
Pau Espin Pedrol9e183722021-12-02 20:12:25 +0100516 data_len := ?,
517 data := data
518 }
519 }
520 }
521 }
522 }
523 }
524}
525
Pau Espin Pedrol25142452021-12-14 18:43:46 +0100526template (value) HNBLLIF_Message ts_HNBLLIF_GTP_CONN_DATA_REQ(template (value) uint32_t gtp_conn_id,
Pau Espin Pedrol9e183722021-12-02 20:12:25 +0100527 template (value) octetstring data) := {
528 sapi := HNBLL_IF_SAPI_GTP,
529 u := {
530 gtp := {
531 prim := HNBLL_IF_GTP_MSG_CONN_DATA,
532 u := {
533 conn_data := {
534 op := HNBLL_IF_OP_REQUEST,
535 u := {
536 req := {
Pau Espin Pedrol25142452021-12-14 18:43:46 +0100537 gtp_conn_id := gtp_conn_id,
Pau Espin Pedrol9e183722021-12-02 20:12:25 +0100538 data_len := lengthof(data),
539 data := data
540 }
541 }
542 }
543 }
544 }
545 }
546}
547
Pau Espin Pedrola6bbb8c2021-11-24 17:00:03 +0100548} with { encode "RAW" variant "BYTEORDER(first)" };