aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--include/osmocom/msc/Makefile.am1
-rw-r--r--include/osmocom/msc/gsm_data.h4
-rw-r--r--include/osmocom/msc/osmux.h11
-rw-r--r--src/libmsc/msc_vty.c23
-rw-r--r--tests/test_nodes.vty1
5 files changed, 40 insertions, 0 deletions
diff --git a/include/osmocom/msc/Makefile.am b/include/osmocom/msc/Makefile.am
index 9ca4c3851..0d7d45ce9 100644
--- a/include/osmocom/msc/Makefile.am
+++ b/include/osmocom/msc/Makefile.am
@@ -28,6 +28,7 @@ noinst_HEADERS = \
msc_t_remote.h \
msub.h \
neighbor_ident.h \
+ osmux.h \
paging.h \
ran_conn.h \
ran_infra.h \
diff --git a/include/osmocom/msc/gsm_data.h b/include/osmocom/msc/gsm_data.h
index 42bb69a06..f6e3ed99f 100644
--- a/include/osmocom/msc/gsm_data.h
+++ b/include/osmocom/msc/gsm_data.h
@@ -19,6 +19,7 @@
#include <osmocom/msc/neighbor_ident.h>
#include "gsm_data_shared.h"
+#include "osmux.h"
/** annotations for msgb ownership */
#define __uses
@@ -231,6 +232,9 @@ struct gsm_network {
uint64_t range_end;
uint64_t next;
} handover_number;
+
+ /* Whether we want to use Osmux against BSCs. Controlled via VTY */
+ enum osmux_usage use_osmux;
};
struct osmo_esme;
diff --git a/include/osmocom/msc/osmux.h b/include/osmocom/msc/osmux.h
new file mode 100644
index 000000000..7af32fc7f
--- /dev/null
+++ b/include/osmocom/msc/osmux.h
@@ -0,0 +1,11 @@
+#pragma once
+
+enum osmux_usage {
+ /* MSC won't use Osmux in call legs towards its RAN */
+ OSMUX_USAGE_OFF = 0,
+ /* MSC will use Osmux in call legs towards RAN as long as RAN announced support for it */
+ OSMUX_USAGE_ON = 1,
+ /* MSC will always use Osmux in call legs towards its RAN, and will
+ reject calls for RANs which didn't announce support for it */
+ OSMUX_USAGE_ONLY = 2,
+};
diff --git a/src/libmsc/msc_vty.c b/src/libmsc/msc_vty.c
index 5c58221a1..0c07bc217 100644
--- a/src/libmsc/msc_vty.c
+++ b/src/libmsc/msc_vty.c
@@ -59,6 +59,7 @@
#include <osmocom/msc/gsm_04_14.h>
#include <osmocom/msc/signal.h>
#include <osmocom/msc/mncc_int.h>
+#include <osmocom/msc/osmux.h>
#include <osmocom/msc/rrlp.h>
#include <osmocom/msc/vlr_sgs.h>
#include <osmocom/msc/sgs_vty.h>
@@ -565,6 +566,22 @@ DEFUN(cfg_msc_handover_number_range, cfg_msc_handover_number_range_cmd,
return CMD_SUCCESS;
}
+#define OSMUX_STR "RTP multiplexing\n"
+DEFUN(cfg_msc_osmux,
+ cfg_msc_osmux_cmd,
+ "osmux (on|off|only)",
+ OSMUX_STR "Enable OSMUX\n" "Disable OSMUX\n" "Only use OSMUX\n")
+{
+ if (strcmp(argv[0], "off") == 0)
+ gsmnet->use_osmux = OSMUX_USAGE_OFF;
+ else if (strcmp(argv[0], "on") == 0)
+ gsmnet->use_osmux = OSMUX_USAGE_ON;
+ else if (strcmp(argv[0], "only") == 0)
+ gsmnet->use_osmux = OSMUX_USAGE_ONLY;
+
+ return CMD_SUCCESS;
+}
+
static int config_write_msc(struct vty *vty)
{
vty_out(vty, "msc%s", VTY_NEWLINE);
@@ -615,6 +632,11 @@ static int config_write_msc(struct vty *vty)
gsmnet->handover_number.range_start, gsmnet->handover_number.range_end,
VTY_NEWLINE);
+ if (gsmnet->use_osmux != OSMUX_USAGE_OFF) {
+ vty_out(vty, " osmux %s%s", gsmnet->use_osmux == OSMUX_USAGE_ON ? "on" : "only",
+ VTY_NEWLINE);
+ }
+
mgcp_client_config_write(vty, " ");
#ifdef BUILD_IU
ranap_iu_vty_config_write(vty, " ");
@@ -1757,6 +1779,7 @@ void msc_vty_init(struct gsm_network *msc_network)
install_element(MSC_NODE, &cfg_msc_emergency_msisdn_cmd);
install_element(MSC_NODE, &cfg_msc_sms_over_gsup_cmd);
install_element(MSC_NODE, &cfg_msc_no_sms_over_gsup_cmd);
+ install_element(MSC_NODE, &cfg_msc_osmux_cmd);
install_element(MSC_NODE, &cfg_msc_handover_number_range_cmd);
neighbor_ident_vty_init(msc_network);
diff --git a/tests/test_nodes.vty b/tests/test_nodes.vty
index cdb3f8ad4..fb7b1c529 100644
--- a/tests/test_nodes.vty
+++ b/tests/test_nodes.vty
@@ -45,6 +45,7 @@ OsmoMSC(config-msc)# list
emergency-call route-to-msisdn MSISDN
sms-over-gsup
no sms-over-gsup
+ osmux (on|off|only)
handover-number range MSISDN_FIRST MSISDN_LAST
neighbor (a|iu) lac <0-65535> (ran-pc|msc-ipa-name) RAN_PC_OR_MSC_IPA_NAME
neighbor (a|iu) lac-ci <0-65535> <0-65535> (ran-pc|msc-ipa-name) RAN_PC_OR_MSC_IPA_NAME