osmo-bsc/include/osmocom/bsc/bsc_subscr_conn_fsm.h

83 lines
2.6 KiB
C

#pragma once
#include <osmocom/core/fsm.h>
enum gscon_fsm_event {
/* local SCCP stack tells us incoming conn from MSC */
GSCON_EV_A_CONN_IND,
/* RSL side requests CONNECT to MSC */
GSCON_EV_A_CONN_REQ,
/* MSC confirms the SCCP connection */
GSCON_EV_A_CONN_CFM,
/* MSC has sent BSSMAP CLEAR CMD */
GSCON_EV_A_CLEAR_CMD,
/* MSC SCCP disconnect indication */
GSCON_EV_A_DISC_IND,
GSCON_EV_ASSIGNMENT_START,
GSCON_EV_ASSIGNMENT_END,
GSCON_EV_HANDOVER_START,
GSCON_EV_HANDOVER_END,
/* RSL CONNection FAILure Indication */
GSCON_EV_RSL_CONN_FAIL,
/* Mobile-originated DTAP (from MS) */
GSCON_EV_MO_DTAP,
/* Mobile-terminated DTAP (from MSC) */
GSCON_EV_MT_DTAP,
/* Transmit custom SCCP message */
GSCON_EV_TX_SCCP,
/* MDCX response received (MSC) - triggered by LCLS */
GSCON_EV_MGW_MDCX_RESP_MSC,
/* LCLS child FSM has terminated due to hard failure */
GSCON_EV_LCLS_FAIL,
GSCON_EV_FORGET_LCHAN,
GSCON_EV_FORGET_MGW_ENDPOINT,
};
struct gsm_subscriber_connection;
struct gsm_network;
struct msgb;
struct mgwep_ci;
struct assignment_request;
struct gsm_lchan;
void bsc_subscr_conn_fsm_init();
/* Allocate a subscriber connection and its associated FSM */
struct gsm_subscriber_connection *bsc_subscr_con_allocate(struct gsm_network *net);
void gscon_update_id(struct gsm_subscriber_connection *conn);
void gscon_submit_rsl_dtap(struct gsm_subscriber_connection *conn,
struct msgb *msg, int link_id, int allow_sacch);
int gscon_sigtran_send(struct gsm_subscriber_connection *conn, struct msgb *msg);
struct mgw_endpoint *gscon_ensure_mgw_endpoint(struct gsm_subscriber_connection *conn,
uint16_t msc_assigned_cic);
bool gscon_connect_mgw_to_msc(struct gsm_subscriber_connection *conn,
struct gsm_lchan *for_lchan,
const char *addr, uint16_t port,
struct osmo_fsm_inst *notify,
uint32_t event_success, uint32_t event_failure,
void *notify_data,
struct mgwep_ci **created_ci);
void gscon_start_assignment(struct gsm_subscriber_connection *conn,
struct assignment_request *req);
void gscon_change_primary_lchan(struct gsm_subscriber_connection *conn, struct gsm_lchan *new_lchan);
void gscon_release_lchans(struct gsm_subscriber_connection *conn, bool do_sacch_deact, bool do_rr_release);
void gscon_lchan_releasing(struct gsm_subscriber_connection *conn, struct gsm_lchan *lchan);
void gscon_forget_lchan(struct gsm_subscriber_connection *conn, struct gsm_lchan *lchan);
void gscon_forget_mgw_endpoint_ci(struct gsm_subscriber_connection *conn, struct mgwep_ci *ci);
bool gscon_is_aoip(struct gsm_subscriber_connection *conn);
bool gscon_is_sccplite(struct gsm_subscriber_connection *conn);