blob: 39b3abca001d7144db07b951bd4cb569879c65bd [file] [log] [blame]
Neels Hofmeyrc4628a32018-12-07 14:47:34 +01001#pragma once
2
3#include <osmocom/msc/msc_roles.h>
4
5struct ran_conn;
6struct ran_infra;
7struct ran_peer;
8struct gsm_mncc;
9struct mncc_call;
10
11#define LOG_MSC_T(MSC_T, LEVEL, FMT, ARGS ...) \
12 LOG_MSC_T_CAT(MSC_T, (MSC_T) ? (MSC_T)->c.ran->log_subsys : DMSC, LEVEL, FMT, ## ARGS)
13#define LOG_MSC_T_CAT(MSC_T, SUBSYS, LEVEL, FMT, ARGS ...) \
14 LOGPFSMSL((MSC_T) ? (MSC_T)->c.fi : NULL, SUBSYS, LEVEL, FMT, ## ARGS)
15#define LOG_MSC_T_CAT_SRC(MSC_T, SUBSYS, LEVEL, SRCFILE, LINE, FMT, ARGS ...) \
16 LOGPFSMSLSRC((MSC_T) ? (MSC_T)->c.fi : NULL, SUBSYS, LEVEL, SRCFILE, LINE, FMT, ## ARGS)
17
18struct msc_t {
19 /* struct msc_role_common must remain at start */
20 struct msc_role_common c;
21
22 struct ran_conn *ran_conn;
23
24 struct {
25 uint8_t chosen_channel;
26 uint8_t chosen_encr_alg;
27 uint8_t chosen_speech_version;
28 } geran;
29
30 struct {
31 struct an_apdu ho_request;
32 struct gsm0808_cell_id cell_id_target;
33 uint32_t callref;
34 char handover_number[16]; /* No libosmocore definition for MSISDN_MAXLEN? */
35 struct call_leg *call_leg;
36 struct mncc_call *mncc_forwarding_to_remote_cn;
37 } inter_msc;
38
39 struct osmo_gsm48_classmark classmark;
40 bool ho_success;
41 bool ho_fail_sent;
42};
43
44enum msc_t_state {
45 MSC_T_ST_PENDING_FIRST_CO_INITIAL_MSG,
46 MSC_T_ST_WAIT_LOCAL_RTP,
47 MSC_T_ST_WAIT_HO_REQUEST_ACK,
48 MSC_T_ST_WAIT_HO_COMPLETE,
49};
50
51struct msc_t *msc_t_alloc_without_ran_peer(struct msub *msub, struct ran_infra *ran);
52int msc_t_set_ran_peer(struct msc_t *msc_t, struct ran_peer *ran_peer);
53struct msc_t *msc_t_alloc(struct msub *msub, struct ran_peer *ran_peer);
54int msc_t_down_l2_co(struct msc_t *msc_t, const struct an_apdu *an_apdu, bool initial);
55void msc_t_clear(struct msc_t *msc_t);
56
57struct gsm_network *msc_t_net(const struct msc_t *msc_t);
58struct vlr_subscr *msc_t_vsub(const struct msc_t *msc_t);
59
60struct mncc_call *msc_t_check_call_to_handover_number(const struct gsm_mncc *msg);