blob: 091b4d7062f40d3856e67a66b503e6779959c67d [file] [log] [blame]
Pau Espin Pedrolb2c6b382019-05-14 13:40:49 +02001/*
2 * (C) 2019 by sysmocom s.f.m.c. GmbH <info@sysmocom.de>
3 * All rights reserved.
4 *
5 * Author: Pau Espin Pedrol <pespin@sysmocom.de>
6 *
7 * Released under the terms of GNU General Public License, Version 2 or
8 * (at your option) any later version.
9 */
10
11module OSMUX_Types {
12
13import from General_Types all;
14
15external function enc_OSMUX_PDU ( in OSMUX_PDU msg ) return octetstring
16 with { extension "prototype(convert) encode(RAW)" };
17external function dec_OSMUX_PDU ( in octetstring msg ) return OSMUX_PDU
18 with { extension "prototype(convert) decode(RAW)" };
19
20type INT1 OsmuxCID (0 .. 255);
21
22type enumerated OsmuxFT {
23 OSMUX_FT_LAPD,
24 OSMUX_FT_AMR,
25 OSMUX_FT_DUMMY
26};
27
28type record Osmux_AMR_header {
29 BIT1 marker,
30 INT2b ft,
31 INT3b ctr,
32 BIT1 amr_f,
33 BIT1 amr_q,
34 INT1 seq,
35 OsmuxCID cid,
36 INT4b amr_ft,
37 INT4b amr_cmr
38} with {
39 variant "FIELDORDER(msb)"
40}
41
42type record PDU_Osmux_AMR {
43 Osmux_AMR_header header,
44 octetstring data
45} with {
46 variant "FIELDORDER(msb)"
47};
48
49type record PDU_Osmux_DUMMY {
50 Osmux_AMR_header header,
51 octetstring data
52} with {
53 variant "FIELDORDER(msb)"
54};
55
56type record Osmux_session_par {
57 integer id optional,
58 charstring local_address optional,
59 integer local_port optional,
60 charstring dest_address optional,
61 integer dest_port optional
62}
63
64type record ASP_Osmux_Open_session {
65 Osmux_session_par session_id
66}
67
68type record ASP_Osmux_Open_session_result {
69 Osmux_session_par session_id
70}
71
72type record ASP_Osmux_Close_session {
73 Osmux_session_par session_id
74}
75
76type union OSMUX_PDU {
77 PDU_Osmux_AMR osmux_amr,
78 PDU_Osmux_DUMMY osmux_dummy
79} with {
80 variant "TAG (
81 osmux_amr, header.ft = 1;
82 osmux_dummy, header.ft = 2;
83 )"
84};
85
86
87/* AMR voice frame type identifiers
88 * See also 3GPP TS 26.101, Table 1a: Interpretation of Frame Type, Mode
89 * Indication and Mode Request fields */
90type enumerated AMRFT {
91 AMR_FT_0, /* 4.75 */
92 AMR_FT_1, /* 5.15 */
93 AMR_FT_2, /* 5.90 */
94 AMR_FT_3, /* 6.70 */
95 AMR_FT_4, /* 7.40 */
96 AMR_FT_5, /* 7.95 */
97 AMR_FT_6, /* 10.2 */
98 AMR_FT_7, /* 12.2 */
99 AMR_FT_SID /* SID */
100};
101
102/* AMR voice frame length (in bytes, rounded),
103 * See also RFC 3267, chapter 3.6 */
104const integer c_AMRFT_len[9] := {12, 13, 15, 17, 19, 20, 26, 31, 5};
105
106function f_amrft_payload_len(INT4b amr_ft) return integer {
107 return c_AMRFT_len[amr_ft];
108}
109
110} with { encode "RAW"}