diff options
Diffstat (limited to 'include/osmocom/msc/msc_t.h')
-rw-r--r-- | include/osmocom/msc/msc_t.h | 60 |
1 files changed, 60 insertions, 0 deletions
diff --git a/include/osmocom/msc/msc_t.h b/include/osmocom/msc/msc_t.h new file mode 100644 index 000000000..39b3abca0 --- /dev/null +++ b/include/osmocom/msc/msc_t.h @@ -0,0 +1,60 @@ +#pragma once + +#include <osmocom/msc/msc_roles.h> + +struct ran_conn; +struct ran_infra; +struct ran_peer; +struct gsm_mncc; +struct mncc_call; + +#define LOG_MSC_T(MSC_T, LEVEL, FMT, ARGS ...) \ + LOG_MSC_T_CAT(MSC_T, (MSC_T) ? (MSC_T)->c.ran->log_subsys : DMSC, LEVEL, FMT, ## ARGS) +#define LOG_MSC_T_CAT(MSC_T, SUBSYS, LEVEL, FMT, ARGS ...) \ + LOGPFSMSL((MSC_T) ? (MSC_T)->c.fi : NULL, SUBSYS, LEVEL, FMT, ## ARGS) +#define LOG_MSC_T_CAT_SRC(MSC_T, SUBSYS, LEVEL, SRCFILE, LINE, FMT, ARGS ...) \ + LOGPFSMSLSRC((MSC_T) ? (MSC_T)->c.fi : NULL, SUBSYS, LEVEL, SRCFILE, LINE, FMT, ## ARGS) + +struct msc_t { + /* struct msc_role_common must remain at start */ + struct msc_role_common c; + + struct ran_conn *ran_conn; + + struct { + uint8_t chosen_channel; + uint8_t chosen_encr_alg; + uint8_t chosen_speech_version; + } geran; + + struct { + struct an_apdu ho_request; + struct gsm0808_cell_id cell_id_target; + uint32_t callref; + char handover_number[16]; /* No libosmocore definition for MSISDN_MAXLEN? */ + struct call_leg *call_leg; + struct mncc_call *mncc_forwarding_to_remote_cn; + } inter_msc; + + struct osmo_gsm48_classmark classmark; + bool ho_success; + bool ho_fail_sent; +}; + +enum msc_t_state { + MSC_T_ST_PENDING_FIRST_CO_INITIAL_MSG, + MSC_T_ST_WAIT_LOCAL_RTP, + MSC_T_ST_WAIT_HO_REQUEST_ACK, + MSC_T_ST_WAIT_HO_COMPLETE, +}; + +struct msc_t *msc_t_alloc_without_ran_peer(struct msub *msub, struct ran_infra *ran); +int msc_t_set_ran_peer(struct msc_t *msc_t, struct ran_peer *ran_peer); +struct msc_t *msc_t_alloc(struct msub *msub, struct ran_peer *ran_peer); +int msc_t_down_l2_co(struct msc_t *msc_t, const struct an_apdu *an_apdu, bool initial); +void msc_t_clear(struct msc_t *msc_t); + +struct gsm_network *msc_t_net(const struct msc_t *msc_t); +struct vlr_subscr *msc_t_vsub(const struct msc_t *msc_t); + +struct mncc_call *msc_t_check_call_to_handover_number(const struct gsm_mncc *msg); |