jolly has uploaded this change for review.
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(-)
git pull ssh://gerrit.osmocom.org:29418/osmo-msc refs/changes/74/33674/1
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;
To view, visit change 33674. To unsubscribe, or for help writing mail filters, visit settings.