aboutsummaryrefslogtreecommitdiffstats
path: root/include/osmocom/bsc/lchan_rtp_fsm.h
diff options
context:
space:
mode:
Diffstat (limited to 'include/osmocom/bsc/lchan_rtp_fsm.h')
-rw-r--r--include/osmocom/bsc/lchan_rtp_fsm.h45
1 files changed, 45 insertions, 0 deletions
diff --git a/include/osmocom/bsc/lchan_rtp_fsm.h b/include/osmocom/bsc/lchan_rtp_fsm.h
new file mode 100644
index 000000000..fa0e74636
--- /dev/null
+++ b/include/osmocom/bsc/lchan_rtp_fsm.h
@@ -0,0 +1,45 @@
+/* osmo-bsc API to manage lchans, logical channels in GSM cells. */
+#pragma once
+
+#define LOG_LCHAN_RTP(lchan, level, fmt, args...) do { \
+ if (lchan->fi_rtp) \
+ LOGPFSML(lchan->fi_rtp, level, fmt, ## args); \
+ else \
+ LOGP(DLMGCP, level, "%s (not initialized) " fmt, gsm_lchan_name(lchan), \
+ ## args); \
+ } while(0)
+
+struct gsm_lchan;
+
+enum lchan_rtp_fsm_state {
+ LCHAN_RTP_ST_WAIT_MGW_ENDPOINT_AVAILABLE,
+ LCHAN_RTP_ST_WAIT_LCHAN_READY,
+ LCHAN_RTP_ST_WAIT_IPACC_CRCX_ACK,
+ LCHAN_RTP_ST_WAIT_IPACC_MDCX_ACK,
+ LCHAN_RTP_ST_WAIT_READY_TO_SWITCH_RTP,
+ LCHAN_RTP_ST_WAIT_MGW_ENDPOINT_CONFIGURED,
+ LCHAN_RTP_ST_READY,
+ LCHAN_RTP_ST_ROLLBACK,
+ LCHAN_RTP_ST_ESTABLISHED,
+};
+
+enum lchan_rtp_fsm_event {
+ LCHAN_RTP_EV_LCHAN_READY,
+ LCHAN_RTP_EV_READY_TO_SWITCH_RTP,
+ LCHAN_RTP_EV_MGW_ENDPOINT_AVAILABLE,
+ LCHAN_RTP_EV_MGW_ENDPOINT_ERROR,
+ LCHAN_RTP_EV_IPACC_CRCX_ACK,
+ LCHAN_RTP_EV_IPACC_CRCX_NACK,
+ LCHAN_RTP_EV_IPACC_MDCX_ACK,
+ LCHAN_RTP_EV_IPACC_MDCX_NACK,
+ LCHAN_RTP_EV_READY_TO_SWITCH,
+ LCHAN_RTP_EV_MGW_ENDPOINT_CONFIGURED,
+ LCHAN_RTP_EV_ROLLBACK, /*< Give the RTP back to the old lchan, if any */
+ LCHAN_RTP_EV_ESTABLISHED, /*< All done, forget about the old lchan, if any */
+ LCHAN_RTP_EV_RELEASE,
+};
+
+void lchan_rtp_fsm_start(struct gsm_lchan *lchan);
+struct mgwep_ci *lchan_use_mgw_endpoint_ci_bts(struct gsm_lchan *lchan);
+bool lchan_rtp_established(struct gsm_lchan *lchan);
+void lchan_forget_mgw_endpoint(struct gsm_lchan *lchan);