blob: db70235c1071bbe8aa60c5b1a8d079b32299382f [file] [log] [blame]
Neels Hofmeyr17518fe2017-06-20 04:35:06 +02001/*! \file mncc.h */
2
Sylvain Munaut12ba7782014-06-16 10:13:40 +02003#pragma once
Harald Welte1e908662010-03-07 23:39:54 +01004
Harald Weltec8a0b932012-08-24 21:27:26 +02005#include <osmocom/gsm/protocol/gsm_04_08.h>
6
Harald Welte1e908662010-03-07 23:39:54 +01007#define GSM_MAX_FACILITY 128
8#define GSM_MAX_SSVERSION 128
9#define GSM_MAX_USERUSER 128
10
11/* Expanded fields from GSM TS 04.08, Table 10.5.102 */
12struct gsm_mncc_bearer_cap {
Neels Hofmeyr4ad3cb12019-09-04 21:43:03 +020013 int transfer; /* Information Transfer Capability, see enum gsm48_bcap_itcap. */
14 int mode; /* Transfer Mode, see enum gsm48_bcap_tmod. */
15 int coding; /* Coding Standard, see enum gsm48_bcap_coding.*/
16 int radio; /* Radio Channel Requirement, see enum gsm48_bcap_rrq. */
Harald Welte1e908662010-03-07 23:39:54 +010017 int speech_ctm; /* CTM text telephony indication */
Neels Hofmeyr73c66822019-04-28 12:54:34 +020018 int speech_ver[8]; /* Speech version indication, see enum gsm48_bcap_speech_ver; -1 marks end */
Harald Weltec8a0b932012-08-24 21:27:26 +020019 struct {
20 enum gsm48_bcap_ra rate_adaption;
21 enum gsm48_bcap_sig_access sig_access;
22 int async;
23 int nr_stop_bits;
24 int nr_data_bits;
25 enum gsm48_bcap_user_rate user_rate;
26 enum gsm48_bcap_parity parity;
27 enum gsm48_bcap_interm_rate interm_rate;
28 enum gsm48_bcap_transp transp;
29 enum gsm48_bcap_modem_type modem_type;
30 } data;
Harald Welte1e908662010-03-07 23:39:54 +010031};
32
33struct gsm_mncc_number {
34 int type;
35 int plan;
36 int present;
37 int screen;
38 char number[33];
39};
40
41struct gsm_mncc_cause {
42 int location;
43 int coding;
44 int rec;
45 int rec_val;
46 int value;
47 int diag_len;
48 char diag[32];
49};
50
51struct gsm_mncc_useruser {
52 int proto;
53 char info[GSM_MAX_USERUSER + 1]; /* + termination char */
54};
55
56struct gsm_mncc_progress {
57 int coding;
58 int location;
59 int descr;
60};
61
62struct gsm_mncc_facility {
63 int len;
64 char info[GSM_MAX_FACILITY];
65};
66
67struct gsm_mncc_ssversion {
68 int len;
69 char info[GSM_MAX_SSVERSION];
70};
71
72struct gsm_mncc_cccap {
73 int dtmf;
74 int pcp;
75};
76
77enum {
78 GSM_MNCC_BCAP_SPEECH = 0,
79 GSM_MNCC_BCAP_UNR_DIG = 1,
80 GSM_MNCC_BCAP_AUDIO = 2,
81 GSM_MNCC_BCAP_FAX_G3 = 3,
82 GSM_MNCC_BCAP_OTHER_ITC = 5,
83 GSM_MNCC_BCAP_RESERVED = 7,
84};
Harald Welte0bbf67d2018-01-01 20:31:58 +010085
86struct msgb;
87struct msgb *osmo_mncc_stringify(const uint8_t *msg, unsigned int len);
88
89void _osmo_mncc_log(int subsys, int level, const char *file, int line, const char *prefix,
90 const uint8_t *msg, unsigned int len);
91
92#define osmo_mncc_log(ss, level, prefix, msg, len) \
Neels Hofmeyr983dcb92018-08-20 12:33:22 +020093 _osmo_mncc_log(ss, level, __FILE__, __LINE__, prefix, msg, len);
Harald Weltedfd85132018-05-24 12:19:45 +020094
95extern const struct value_string osmo_mncc_names[];
96static inline const char *osmo_mncc_name(uint32_t msg_type) {
97 return get_value_string(osmo_mncc_names, msg_type);
98}