aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorNeels Hofmeyr <nhofmeyr@sysmocom.de>2023-03-03 16:43:19 +0100
committerNeels Hofmeyr <nhofmeyr@sysmocom.de>2023-03-18 03:05:34 +0100
commit1dc3961a0a1bdc7493002f973fd95197e09a9a91 (patch)
treea0a3c7fe63f9942f7ca027011c8c1edc3a6dd46f
parentc0f9474045589e41a7929f2408e9d4865b39fd8e (diff)
add ran_infra.force_mgw_codecs_to_ran
Indicate in the ran_infra data structure whether a RAN needs specific codecs to be set up on the RAN facing MGW endpoint. This allows setting forced RAN codecs as first-class citizen in the ran_infra data structure, instead of special cases in the code (for IuUP on IuCS). Will be used in subsequent commit I37f65c36af2679ecba1040a11a9aa0eb9481d817, submitted separately for easier readability. Change-Id: I37f65c36af2679ecba1040a11a9aa0eb9481d817
-rw-r--r--include/osmocom/msc/ran_infra.h5
-rw-r--r--src/libmsc/msc_a.c2
-rw-r--r--src/libmsc/ran_infra.c10
-rw-r--r--tests/msc_vlr/msc_vlr_tests.c10
4 files changed, 27 insertions, 0 deletions
diff --git a/include/osmocom/msc/ran_infra.h b/include/osmocom/msc/ran_infra.h
index 38c424f09..262a9c82e 100644
--- a/include/osmocom/msc/ran_infra.h
+++ b/include/osmocom/msc/ran_infra.h
@@ -4,6 +4,7 @@
#include <osmocom/gsm/gsup.h>
#include <osmocom/msc/sccp_ran.h>
#include <osmocom/msc/ran_msg.h>
+#include <osmocom/msc/sdp_msg.h>
struct osmo_tdef;
@@ -25,6 +26,10 @@ struct ran_infra {
const ran_dec_l2_t ran_dec_l2;
const ran_encode_t ran_encode;
struct sccp_ran_inst *sri;
+ /* To always set up the MGW endpoint facing the RAN side with specific codecs, list those here. Otherwise leave
+ * empty (to use the result of codecs filtering). This exists for IuCS, to always set the MGW endpoint facing
+ * RAN to IUFP, to decapsulate the IuUP headers. */
+ struct sdp_audio_codecs force_mgw_codecs_to_ran;
};
extern struct ran_infra msc_ran_infra[];
diff --git a/src/libmsc/msc_a.c b/src/libmsc/msc_a.c
index 4c7f763c7..7db1d0a40 100644
--- a/src/libmsc/msc_a.c
+++ b/src/libmsc/msc_a.c
@@ -1791,6 +1791,8 @@ static int msc_a_start_assignment(struct msc_a *msc_a, struct gsm_trans *cc_tran
return osmo_fsm_inst_dispatch(msc_a->c.fi, MSC_EV_CALL_LEG_RTP_LOCAL_ADDR_AVAILABLE, cl->rtp[RTP_TO_RAN]);
if (msc_a->c.ran->type == OSMO_RAT_UTRAN_IU) {
+ /* FUTURE: ran_infra->force_mgw_codecs_to_ran is intended to be used here instead of the special
+ * condition on OSMO_RAT_UTRAN_IU and the mgcp_codecs value CODEC_IUFP */
codec = CODEC_IUFP;
codec_ptr = &codec;
} else {
diff --git a/src/libmsc/ran_infra.c b/src/libmsc/ran_infra.c
index c0eaa1ac2..35dfd614f 100644
--- a/src/libmsc/ran_infra.c
+++ b/src/libmsc/ran_infra.c
@@ -108,6 +108,16 @@ struct ran_infra msc_ran_infra[] = {
.ran_dec_l2 = ran_iu_decode_l2,
.ran_encode = ran_iu_encode,
#endif
+ .force_mgw_codecs_to_ran = {
+ .count = 1,
+ .codec = {
+ {
+ .payload_type = 96,
+ .subtype_name = "VND.3GPP.IUFP",
+ .rate = 16000,
+ },
+ },
+ },
},
[OSMO_RAT_EUTRAN_SGS] = {
.type = OSMO_RAT_EUTRAN_SGS,
diff --git a/tests/msc_vlr/msc_vlr_tests.c b/tests/msc_vlr/msc_vlr_tests.c
index 6b80452d9..b0c60edad 100644
--- a/tests/msc_vlr/msc_vlr_tests.c
+++ b/tests/msc_vlr/msc_vlr_tests.c
@@ -408,6 +408,16 @@ struct ran_infra test_ran_infra[] = {
.log_subsys = DIUCS,
.tdefs = msc_tdefs_utran,
.ran_encode = dont_ran_encode,
+ .force_mgw_codecs_to_ran = {
+ .count = 1,
+ .codec = {
+ {
+ .payload_type = 96,
+ .subtype_name = "VND.3GPP.IUFP",
+ .rate = 16000,
+ },
+ },
+ },
},
};