4b6d3a19038b33d8c34b29808e07ac6023e6bbe8
[lcr.git] / mncc.h
1
2 #define MNCC_SETUP_REQ          0x0101
3 #define MNCC_SETUP_IND          0x0102
4 #define MNCC_SETUP_RSP          0x0103
5 #define MNCC_SETUP_CNF          0x0104
6 #define MNCC_SETUP_COMPL_REQ    0x0105
7 #define MNCC_SETUP_COMPL_IND    0x0106
8 /* MNCC_REJ_* is perfomed via MNCC_REL_* */
9 #define MNCC_CALL_CONF_IND      0x0107
10 #define MNCC_CALL_PROC_REQ      0x0108
11 #define MNCC_PROGRESS_REQ       0x0109
12 #define MNCC_ALERT_REQ          0x010a
13 #define MNCC_ALERT_IND          0x010b
14 #define MNCC_NOTIFY_REQ         0x010c
15 #define MNCC_NOTIFY_IND         0x010d
16 #define MNCC_DISC_REQ           0x010e
17 #define MNCC_DISC_IND           0x010f
18 #define MNCC_REL_REQ            0x0110
19 #define MNCC_REL_IND            0x0111
20 #define MNCC_REL_CNF            0x0112
21 #define MNCC_FACILITY_REQ       0x0113
22 #define MNCC_FACILITY_IND       0x0114
23 #define MNCC_START_DTMF_IND     0x0115
24 #define MNCC_START_DTMF_RSP     0x0116
25 #define MNCC_START_DTMF_REJ     0x0117
26 #define MNCC_STOP_DTMF_IND      0x0118
27 #define MNCC_STOP_DTMF_RSP      0x0119
28 #define MNCC_MODIFY_REQ         0x011a
29 #define MNCC_MODIFY_IND         0x011b
30 #define MNCC_MODIFY_RSP         0x011c
31 #define MNCC_MODIFY_CNF         0x011d
32 #define MNCC_MODIFY_REJ         0x011e
33 #define MNCC_HOLD_IND           0x011f
34 #define MNCC_HOLD_CNF           0x0120
35 #define MNCC_HOLD_REJ           0x0121
36 #define MNCC_RETRIEVE_IND       0x0122
37 #define MNCC_RETRIEVE_CNF       0x0123
38 #define MNCC_RETRIEVE_REJ       0x0124
39 #define MNCC_USERINFO_REQ       0x0125
40 #define MNCC_USERINFO_IND       0x0126
41 #define MNCC_REJ_REQ            0x0127
42 #define MNCC_REJ_IND            0x0128
43 #define MNCC_PROGRESS_IND       0x0129
44 #define MNCC_CALL_PROC_IND      0x012a
45 #define MNCC_CALL_CONF_REQ      0x012b
46 #define MNCC_START_DTMF_REQ     0x012c
47 #define MNCC_STOP_DTMF_REQ      0x012d
48 #define MNCC_HOLD_REQ           0x012e
49 #define MNCC_RETRIEVE_REQ       0x012f
50
51 #define MNCC_BRIDGE             0x0200
52 #define MNCC_FRAME_RECV         0x0201
53 #define MNCC_FRAME_DROP         0x0202
54 #define MNCC_LCHAN_MODIFY       0x0203
55 #define MNCC_RTP_CREATE         0x0204
56 #define MNCC_RTP_CONNECT        0x0205
57 #define MNCC_RTP_FREE           0x0206
58
59 #define GSM_TCHF_FRAME          0x0300
60 #define GSM_TCHF_FRAME_EFR      0x0301
61 #define GSM_TCHH_FRAME          0x0302
62 #define GSM_TCH_FRAME_AMR       0x0303
63 #define GSM_BAD_FRAME           0x03ff
64
65 #define GSM_MAX_FACILITY        128
66 #define GSM_MAX_SSVERSION       128
67 #define GSM_MAX_USERUSER        128
68
69 #define MNCC_F_BEARER_CAP       0x0001
70 #define MNCC_F_CALLED           0x0002
71 #define MNCC_F_CALLING          0x0004
72 #define MNCC_F_REDIRECTING      0x0008
73 #define MNCC_F_CONNECTED        0x0010
74 #define MNCC_F_CAUSE            0x0020
75 #define MNCC_F_USERUSER         0x0040
76 #define MNCC_F_PROGRESS         0x0080
77 #define MNCC_F_EMERGENCY        0x0100
78 #define MNCC_F_FACILITY         0x0200
79 #define MNCC_F_SSVERSION        0x0400
80 #define MNCC_F_CCCAP            0x0800
81 #define MNCC_F_KEYPAD           0x1000
82 #define MNCC_F_SIGNAL           0x2000
83
84 #define GSM_MAX_FACILITY       128
85 #define GSM_MAX_SSVERSION      128
86 #define GSM_MAX_USERUSER       128
87
88 /* GSM 04.08 Bearer Capability: Information Transfer Capability */
89 enum gsm48_bcap_itcap {
90         GSM48_BCAP_ITCAP_SPEECH         = 0,
91         GSM48_BCAP_ITCAP_UNR_DIG_INF    = 1,
92         GSM48_BCAP_ITCAP_3k1_AUDIO      = 2,
93         GSM48_BCAP_ITCAP_FAX_G3         = 3,
94         GSM48_BCAP_ITCAP_OTHER          = 5,
95         GSM48_BCAP_ITCAP_RESERVED       = 7,
96 };
97
98 /* GSM 04.08 Bearer Capability: Transfer Mode */
99 enum gsm48_bcap_tmod {
100         GSM48_BCAP_TMOD_CIRCUIT         = 0,
101         GSM48_BCAP_TMOD_PACKET          = 1,
102 };
103
104 /* GSM 04.08 Bearer Capability: Coding Standard */
105 enum gsm48_bcap_coding {
106         GSM48_BCAP_CODING_GSM_STD       = 0,
107 };
108
109 /* GSM 04.08 Bearer Capability: Radio Channel Requirements */
110 enum gsm48_bcap_rrq {
111         GSM48_BCAP_RRQ_FR_ONLY  = 1,
112         GSM48_BCAP_RRQ_DUAL_HR  = 2,
113         GSM48_BCAP_RRQ_DUAL_FR  = 3,
114 };
115
116 /* GSM 04.08 Bearer Capability: Rate Adaption */
117 enum gsm48_bcap_ra {
118         GSM48_BCAP_RA_NONE      = 0,
119         GSM48_BCAP_RA_V110_X30  = 1,
120         GSM48_BCAP_RA_X31       = 2,
121         GSM48_BCAP_RA_OTHER     = 3,
122 };
123
124 /* GSM 04.08 Bearer Capability: Signalling access protocol */
125 enum gsm48_bcap_sig_access {
126         GSM48_BCAP_SA_I440_I450 = 1,
127         GSM48_BCAP_SA_X21       = 2,
128         GSM48_BCAP_SA_X28_DP_IN = 3,
129         GSM48_BCAP_SA_X28_DP_UN = 4,
130         GSM48_BCAP_SA_X28_NDP   = 5,
131         GSM48_BCAP_SA_X32       = 6,
132 };
133
134 /* GSM 04.08 Bearer Capability: User Rate */
135 enum gsm48_bcap_user_rate {
136         GSM48_BCAP_UR_300       = 1,
137         GSM48_BCAP_UR_1200      = 2,
138         GSM48_BCAP_UR_2400      = 3,
139         GSM48_BCAP_UR_4800      = 4,
140         GSM48_BCAP_UR_9600      = 5,
141         GSM48_BCAP_UR_12000     = 6,
142         GSM48_BCAP_UR_1200_75   = 7,
143 };
144
145 /* GSM 04.08 Bearer Capability: Parity */
146 enum gsm48_bcap_parity {
147         GSM48_BCAP_PAR_ODD      = 0,
148         GSM48_BCAP_PAR_EVEN     = 2,
149         GSM48_BCAP_PAR_NONE     = 3,
150         GSM48_BCAP_PAR_ZERO     = 4,
151         GSM48_BCAP_PAR_ONE      = 5,
152 };
153
154 /* GSM 04.08 Bearer Capability: Intermediate Rate */
155 enum gsm48_bcap_interm_rate {
156         GSM48_BCAP_IR_8k        = 2,
157         GSM48_BCAP_IR_16k       = 3,
158 };
159
160 /* GSM 04.08 Bearer Capability: Transparency */
161 enum gsm48_bcap_transp {
162         GSM48_BCAP_TR_TRANSP    = 0,
163         GSM48_BCAP_TR_RLP       = 1,
164         GSM48_BCAP_TR_TR_PREF   = 2,
165         GSM48_BCAP_TR_RLP_PREF  = 3,
166 };
167
168 /* GSM 04.08 Bearer Capability: Modem Type */
169 enum gsm48_bcap_modem_type {
170         GSM48_BCAP_MT_NONE      = 0,
171         GSM48_BCAP_MT_V21       = 1,
172         GSM48_BCAP_MT_V22       = 2,
173         GSM48_BCAP_MT_V22bis    = 3,
174         GSM48_BCAP_MT_V23       = 4,
175         GSM48_BCAP_MT_V26ter    = 5,
176         GSM48_BCAP_MT_V32       = 6,
177         GSM48_BCAP_MT_UNDEF     = 7,
178         GSM48_BCAP_MT_AUTO_1    = 8,
179 };
180
181 /* GSM 04.08 Bearer Capability: Speech Version Indication */
182 enum gsm48_bcap_speech_ver {
183         GSM48_BCAP_SV_FR        = 0,
184         GSM48_BCAP_SV_HR        = 1,
185         GSM48_BCAP_SV_EFR       = 2,
186         GSM48_BCAP_SV_AMR_F     = 4,
187         GSM48_BCAP_SV_AMR_H     = 5,
188 };
189
190 /* Expanded fields from GSM TS 04.08, Table 10.5.102 */
191 struct gsm_mncc_bearer_cap {
192         int             transfer;       /* Information Transfer Capability */
193         int             mode;           /* Transfer Mode */
194         int             coding;         /* Coding Standard */
195         int             radio;          /* Radio Channel Requirement */
196         int             speech_ctm;     /* CTM text telephony indication */
197         int             speech_ver[8];  /* Speech version indication */
198         struct {
199                 enum gsm48_bcap_ra              rate_adaption;
200                 enum gsm48_bcap_sig_access      sig_access;
201                 int                             async;
202                 int                             nr_stop_bits;
203                 int                             nr_data_bits;
204                 enum gsm48_bcap_user_rate       user_rate;
205                 enum gsm48_bcap_parity          parity;
206                 enum gsm48_bcap_interm_rate     interm_rate;
207                 enum gsm48_bcap_transp          transp;
208                 enum gsm48_bcap_modem_type      modem_type;
209         } data;
210 };
211
212 struct gsm_mncc_number {
213         int             type;
214         int             plan;
215         int             present;
216         int             screen;
217         char            number[33];
218 };
219
220 struct gsm_mncc_cause {
221         int             location;
222         int             coding;
223         int             rec;
224         int             rec_val;
225         int             value;
226         int             diag_len;
227         char            diag[32];
228 };
229
230 struct gsm_mncc_useruser {
231         int             proto;
232         char            info[GSM_MAX_USERUSER + 1]; /* + termination char */
233 };
234
235 struct gsm_mncc_progress {
236         int             coding;
237         int             location;
238         int             descr;
239 };
240
241 struct gsm_mncc_facility {
242         int             len;
243         char            info[GSM_MAX_FACILITY];
244 };
245
246 struct gsm_mncc_ssversion {
247         int             len;
248         char            info[GSM_MAX_SSVERSION];
249 };
250
251 struct gsm_mncc_cccap {
252         int             dtmf;
253         int             pcp;
254 };
255
256 enum {
257         GSM_MNCC_BCAP_SPEECH    = 0,
258         GSM_MNCC_BCAP_UNR_DIG   = 1,
259         GSM_MNCC_BCAP_AUDIO     = 2,
260         GSM_MNCC_BCAP_FAX_G3    = 3,
261         GSM_MNCC_BCAP_OTHER_ITC = 5,
262         GSM_MNCC_BCAP_RESERVED  = 7,
263 };
264
265 enum {
266         GSM_LCHAN_NONE,
267         GSM_LCHAN_SDCCH,
268         GSM_LCHAN_TCH_F,
269         GSM_LCHAN_TCH_H,
270         GSM_LCHAN_UNKNOWN,
271         GSM_LCHAN_CCCH,
272         GSM_LCHAN_PDTCH,
273         _GSM_LCHAN_MAX
274 };
275
276 struct gsm_mncc {
277         /* context based information */
278         u_int32_t       msg_type;
279         u_int32_t       callref;
280
281         /* which fields are present */
282         u_int32_t       fields;
283
284         /* data derived informations (MNCC_F_ based) */
285         struct gsm_mncc_bearer_cap      bearer_cap;
286         struct gsm_mncc_number          called;
287         struct gsm_mncc_number          calling;
288         struct gsm_mncc_number          redirecting;
289         struct gsm_mncc_number          connected;
290         struct gsm_mncc_cause           cause;
291         struct gsm_mncc_progress        progress;
292         struct gsm_mncc_useruser        useruser;
293         struct gsm_mncc_facility        facility;
294         struct gsm_mncc_cccap           cccap;
295         struct gsm_mncc_ssversion       ssversion;
296         struct  {
297                 int             sup;
298                 int             inv;
299         } clir;
300         int             signal;
301
302         /* data derived information, not MNCC_F based */
303         int             keypad;
304         int             more;
305         int             notify; /* 0..127 */
306         int             emergency;
307         char            imsi[16];
308
309         unsigned char   lchan_type;
310         unsigned char   lchan_mode;
311 };
312
313 struct gsm_data_frame {
314         u_int32_t       msg_type;
315         u_int32_t       callref;
316         unsigned char   data[0];
317 };
318
319 struct gsm_mncc_rtp {
320         u_int32_t       msg_type;
321         u_int32_t       callref;
322         u_int32_t       ip;
323         u_int16_t       port;
324         u_int32_t       payload_type;
325         u_int32_t       payload_msg_type;
326 };
327
328