laforge has submitted this change. ( https://gerrit.osmocom.org/c/osmo-msc/+/33674 )
Change subject: ASCI: Add option to switch on or off ASCI support ......................................................................
ASCI: Add option to switch on or off ASCI support
Switching ASCI support is controled via VTY. This added in a later patch. (Chg-Id: I5bd034a62fc8b483f550d29103c2f7587198f590)
Change-Id: Id68deb69f7395f0f8f50b3820e9d51052a34f753 Related: OS#4854 --- M include/osmocom/msc/gsm_data.h M include/osmocom/msc/msc_a.h M src/libmsc/gsm_04_08.c M src/libmsc/msc_a.c 4 files changed, 29 insertions(+), 7 deletions(-)
Approvals: laforge: Looks good to me, approved pespin: Looks good to me, approved Jenkins Builder: Verified
diff --git a/include/osmocom/msc/gsm_data.h b/include/osmocom/msc/gsm_data.h index 6c0dac9..119f093 100644 --- a/include/osmocom/msc/gsm_data.h +++ b/include/osmocom/msc/gsm_data.h @@ -272,6 +272,7 @@
/* ASCI feature support */ struct { + bool enable; struct llist_head gcr_lists; } asci; }; diff --git a/include/osmocom/msc/msc_a.h b/include/osmocom/msc/msc_a.h index bef7417..0276d62 100644 --- a/include/osmocom/msc/msc_a.h +++ b/include/osmocom/msc/msc_a.h @@ -217,7 +217,7 @@ int msc_a_ensure_cn_local_rtp(struct msc_a *msc_a, struct gsm_trans *cc_trans); int msc_a_try_call_assignment(struct gsm_trans *cc_trans);
-const char *msc_a_cm_service_type_to_use(enum osmo_cm_service_type cm_service_type); +const char *msc_a_cm_service_type_to_use(struct msc_a *msc_a, enum osmo_cm_service_type cm_service_type);
void msc_a_release_cn(struct msc_a *msc_a); void msc_a_release_mo(struct msc_a *msc_a, enum gsm48_gsm_cause gsm_cause); diff --git a/src/libmsc/gsm_04_08.c b/src/libmsc/gsm_04_08.c index bd7cfe0..10c4a57 100644 --- a/src/libmsc/gsm_04_08.c +++ b/src/libmsc/gsm_04_08.c @@ -798,13 +798,13 @@ return msc_gsm48_tx_mm_serv_rej(msc_a, GSM48_REJECT_INCORRECT_MESSAGE); }
- if (!msc_a_cm_service_type_to_use(req->cm_service_type)) + if (!msc_a_cm_service_type_to_use(msc_a, req->cm_service_type)) return msc_gsm48_tx_mm_serv_rej(msc_a, GSM48_REJECT_SRV_OPT_NOT_SUPPORTED);
/* At this point, the CM Service Request message is being accepted. * Increment the matching use token, and from here on use msc_vlr_tx_cm_serv_rej() to respond in case of * failure. */ - msc_a_get(msc_a, msc_a_cm_service_type_to_use(req->cm_service_type)); + msc_a_get(msc_a, msc_a_cm_service_type_to_use(msc_a, req->cm_service_type));
if (msc_a_is_accepted(msc_a)) return cm_serv_reuse_conn(msc_a, &mi, req->cm_service_type); @@ -1531,7 +1531,7 @@ { struct msc_a *msc_a = msc_conn_ref; msc_gsm48_tx_mm_serv_rej(msc_a, cause); - msc_a_put(msc_a, msc_a_cm_service_type_to_use(cm_service_type)); + msc_a_put(msc_a, msc_a_cm_service_type_to_use(msc_a, cm_service_type)); return 0; }
diff --git a/src/libmsc/msc_a.c b/src/libmsc/msc_a.c index 7013176..9f2420e 100644 --- a/src/libmsc/msc_a.c +++ b/src/libmsc/msc_a.c @@ -2085,8 +2085,10 @@ * Given a CM Service type, return a matching token intended for osmo_use_count. * For unknown service type, return NULL. */ -const char *msc_a_cm_service_type_to_use(enum osmo_cm_service_type cm_service_type) +const char *msc_a_cm_service_type_to_use(struct msc_a *msc_a, enum osmo_cm_service_type cm_service_type) { + struct gsm_network *net = msc_a_net(msc_a); + switch (cm_service_type) { case GSM48_CMSERV_MO_CALL_PACKET: case GSM48_CMSERV_EMERGENCY: @@ -2099,10 +2101,16 @@ return MSC_A_USE_CM_SERVICE_SS;
case GSM48_CMSERV_VGCS: - return MSC_A_USE_CM_SERVICE_GCC; + if (net->asci.enable) + return MSC_A_USE_CM_SERVICE_GCC; + else + return NULL;
case GSM48_CMSERV_VBS: - return MSC_A_USE_CM_SERVICE_BCC; + if (net->asci.enable) + return MSC_A_USE_CM_SERVICE_BCC; + else + return NULL;
default: return NULL;