From 456c6f7e4d0814e7fffad9f97a37b6138248a773 Mon Sep 17 00:00:00 2001 From: Andreas Eversberg Date: Sun, 23 Apr 2023 11:54:16 +0200 Subject: ASCI: Add two new transaction types for VGCS and VBS - TRANS_GCC is used for the voice group call. - TRANS_BCC for the voice broadcast call. This also includes the use counters for transaction and CM service request usage: - MSC_A_USE_GCC - MSC_A_USE_BCC - MSC_A_USE_CM_SERVICE_BCC - MSC_A_USE_CM_SERVICE_GCC Change-Id: Iddd11f813582ac2ac2bdee91cc3a525986deb514 Related: OS#4854 --- include/osmocom/msc/msc_a.h | 4 ++++ include/osmocom/msc/transaction.h | 6 ++++++ src/libmsc/msc_a.c | 18 ++++++++++++++++++ src/libmsc/transaction.c | 6 ++++++ 4 files changed, 34 insertions(+) diff --git a/include/osmocom/msc/msc_a.h b/include/osmocom/msc/msc_a.h index bb7b8f96d..525674434 100644 --- a/include/osmocom/msc/msc_a.h +++ b/include/osmocom/msc/msc_a.h @@ -40,9 +40,13 @@ struct ran_infra; #define MSC_A_USE_LOCATION_UPDATING "lu" #define MSC_A_USE_CM_SERVICE_CC "cm_service_cc" +#define MSC_A_USE_CM_SERVICE_GCC "cm_service_gcc" +#define MSC_A_USE_CM_SERVICE_BCC "cm_service_bcc" #define MSC_A_USE_CM_SERVICE_SMS "cm_service_sms" #define MSC_A_USE_CM_SERVICE_SS "cm_service_ss" #define MSC_A_USE_PAGING_RESPONSE "paging-response" +#define MSC_A_USE_GCC "gcc" +#define MSC_A_USE_BCC "bcc" #define MSC_A_USE_CC "cc" #define MSC_A_USE_SMS "sms" #define MSC_A_USE_SMS_MMTS "sms_mmts" diff --git a/include/osmocom/msc/transaction.h b/include/osmocom/msc/transaction.h index bc6c31625..356bd6c8b 100644 --- a/include/osmocom/msc/transaction.h +++ b/include/osmocom/msc/transaction.h @@ -43,6 +43,8 @@ enum bridge_state { }; enum trans_type { + TRANS_GCC = GSM48_PDISC_GROUP_CC, + TRANS_BCC = GSM48_PDISC_BCAST_CC, TRANS_CC = GSM48_PDISC_CC, TRANS_SMS = GSM48_PDISC_SMS, TRANS_USSD = GSM48_PDISC_NC_SS, @@ -178,6 +180,10 @@ void trans_conn_closed(const struct msc_a *msc_a); static inline int trans_log_subsys(enum trans_type type) { switch (type) { + case TRANS_GCC: + return DGCC; + case TRANS_BCC: + return DBCC; case TRANS_CC: case TRANS_SILENT_CALL: return DCC; diff --git a/src/libmsc/msc_a.c b/src/libmsc/msc_a.c index b9aaeaa38..5a5bb8afe 100644 --- a/src/libmsc/msc_a.c +++ b/src/libmsc/msc_a.c @@ -488,6 +488,16 @@ static bool msc_a_fsm_has_active_transactions(struct osmo_fsm_inst *fi) __func__); return true; } + if (osmo_use_count_by(&msc_a->use_count, MSC_A_USE_CM_SERVICE_GCC)) { + LOG_MSC_A(msc_a, LOGL_DEBUG, "%s: still awaiting MO GCC request after a CM Service Request\n", + __func__); + return true; + } + if (osmo_use_count_by(&msc_a->use_count, MSC_A_USE_CM_SERVICE_BCC)) { + LOG_MSC_A(msc_a, LOGL_DEBUG, "%s: still awaiting MO BCC request after a CM Service Request\n", + __func__); + return true; + } if (osmo_use_count_by(&msc_a->use_count, MSC_A_USE_CM_SERVICE_SMS)) { LOG_MSC_A(msc_a, LOGL_DEBUG, "%s: still awaiting MO SMS after a CM Service Request\n", __func__); @@ -873,6 +883,8 @@ static void msc_a_fsm_releasing_onenter(struct osmo_fsm_inst *fi, uint32_t prev_ MSC_A_USE_CM_SERVICE_CC, MSC_A_USE_CM_SERVICE_SMS, MSC_A_USE_CM_SERVICE_SS, + MSC_A_USE_CM_SERVICE_GCC, + MSC_A_USE_CM_SERVICE_BCC, MSC_A_USE_PAGING_RESPONSE, }; @@ -1955,6 +1967,12 @@ const char *msc_a_cm_service_type_to_use(enum osmo_cm_service_type cm_service_ty case GSM48_CMSERV_SUP_SERV: return MSC_A_USE_CM_SERVICE_SS; + case GSM48_CMSERV_VGCS: + return MSC_A_USE_CM_SERVICE_GCC; + + case GSM48_CMSERV_VBS: + return MSC_A_USE_CM_SERVICE_BCC; + default: return NULL; } diff --git a/src/libmsc/transaction.c b/src/libmsc/transaction.c index 21f0b8b08..9fc468227 100644 --- a/src/libmsc/transaction.c +++ b/src/libmsc/transaction.c @@ -351,6 +351,8 @@ void trans_conn_closed(const struct msc_a *msc_a) } const struct value_string trans_type_names[] = { + { TRANS_GCC, "GCC" }, + { TRANS_BCC, "BCC" }, { TRANS_CC, "CC" }, { TRANS_SMS, "SMS" }, { TRANS_USSD, "NCSS" }, @@ -361,6 +363,10 @@ const struct value_string trans_type_names[] = { uint8_t trans_type_to_gsm48_proto(enum trans_type type) { switch (type) { + case TRANS_GCC: + return GSM48_PDISC_GROUP_CC; + case TRANS_BCC: + return GSM48_PDISC_BCAST_CC; case TRANS_CC: case TRANS_SILENT_CALL: return GSM48_PDISC_CC; -- cgit v1.2.3