blob: a2a5fb133dc28a803f856c3916ca9a3f8208e724 [file] [log] [blame]
Neels Hofmeyrc4628a32018-12-07 14:47:34 +01001#pragma once
2
3#include <osmocom/core/utils.h>
4#include <osmocom/gsm/mncc.h>
5
6#include <osmocom/msc/msc_roles.h>
7
8struct ran_infra;
9struct mncc_call;
10
11#define LOG_MSC_I(MSC_I, LEVEL, FMT, ARGS ...) \
12 LOG_MSC_I_CAT(MSC_I, (MSC_I) ? (MSC_I)->c.ran->log_subsys : DMSC, LEVEL, FMT, ## ARGS)
13#define LOG_MSC_I_CAT(MSC_I, SUBSYS, LEVEL, FMT, ARGS ...) \
14 LOGPFSMSL((MSC_I) ? (MSC_I)->c.fi : NULL, SUBSYS, LEVEL, FMT, ## ARGS)
15#define LOG_MSC_I_CAT_SRC(MSC_I, SUBSYS, LEVEL, SRCFILE, LINE, FMT, ARGS ...) \
16 LOGPFSMSLSRC((MSC_I) ? (MSC_I)->c.fi : NULL, SUBSYS, LEVEL, SRCFILE, LINE, FMT, ## ARGS)
17
18struct msc_i {
19 /* struct msc_role_common must remain at start */
20 struct msc_role_common c;
21 struct ran_conn *ran_conn;
22
23 struct {
24 struct call_leg *call_leg;
25 struct mncc_call *mncc_forwarding_to_remote_cn;
26 } inter_msc;
27};
28
29osmo_static_assert(offsetof(struct msc_i, c) == 0, msc_role_common_first_member_of_msc_i);
30
31enum msc_i_state {
32 MSC_I_ST_READY,
33 MSC_I_ST_CLEARING,
34 MSC_I_ST_CLEARED,
35};
36
37struct msc_i *msc_i_alloc(struct msub *msub, struct ran_infra *ran);
38void msc_i_set_ran_conn(struct msc_i *msc_i, struct ran_conn *ran_conn);
39
40void msc_i_clear(struct msc_i *msc_i);
41void msc_i_cleared(struct msc_i *msc_i);
42
43int msc_i_down_l2(struct msc_i *msc_i, struct msgb *l2);
44
45struct gsm_network *msc_i_net(const struct msc_i *msc_i);
46struct vlr_subscr *msc_i_vsub(const struct msc_i *msc_i);