laforge has submitted this change. ( https://gerrit.osmocom.org/c/osmo-ttcn3-hacks/+/32220 )
(
6 is the latest approved patch-set.
No files were changed between the latest approved patch-set and the submitted one.
)Change subject: MGCP_Test: add new testcases for oa/bwe conversion
......................................................................
MGCP_Test: add new testcases for oa/bwe conversion
The octet aligned to bandwith efficient conversion is currently only
tested in scenarios where only one codec is assigned on both sides.
However, there may be call agents that will assign bandwith efficient
and octet aligned on one side for compatibility reasons. If this is the
case, then OsmoMGW should always chose the format that requires no
conversion.
Related: OS#5461
Change-Id: I2b2d7ef7fb4fe31111aa8665c4d4295425502451
---
M mgw/MGCP_Test.ttcn
1 file changed, 71 insertions(+), 11 deletions(-)
Approvals:
laforge: Looks good to me, approved
pespin: Looks good to me, but someone else must approve
Jenkins Builder: Verified
diff --git a/mgw/MGCP_Test.ttcn b/mgw/MGCP_Test.ttcn
index 909ad25..28b7103 100644
--- a/mgw/MGCP_Test.ttcn
+++ b/mgw/MGCP_Test.ttcn
@@ -2351,7 +2351,9 @@
/* create two local RTP emulations; create two connections on MGW EP, see if
* exchanged data is converted between AMR octet-aligned and bandwidth
* efficient-mode */
- function f_TC_amr_x_x_rtp_conversion(octetstring pl0, octetstring pl1, charstring fmtp0, charstring fmtp1) runs on dummy_CT {
+ function f_TC_amr_x_x_rtp_conversion(charstring fmtp0, octetstring pl0,
+ charstring fmtp1a, octetstring pl1a,
+ charstring fmtp1b, octetstring pl1b) runs on dummy_CT {
var RtpFlowData flow[2];
var RtpemStats stats[2];
var MgcpResponse resp;
@@ -2372,13 +2374,25 @@
f_flow_create(RTPEM[0], ep, call_id, "sendrecv", flow[0]);
/* Connection #1 (Bidirectional) */
- flow[1] := valueof(t_RtpFlow(mp_local_ipv4, mp_remote_ipv4, 112, "AMR/8000", fmtp1));
+ flow[1] := valueof(t_RtpFlow(mp_local_ipv4, mp_remote_ipv4, 112, "AMR/8000", fmtp1a));
flow[1].em.portnr := 20000;
flow[1].rtp_cfg := c_RtpemDefaultCfg;
- flow[1].rtp_cfg.rx_payloads[0].payload_type := flow[1].codec_descr[0].pt;
- flow[1].rtp_cfg.tx_payloads[0].payload_type := flow[1].codec_descr[0].pt;
- flow[1].rtp_cfg.rx_payloads[0].fixed_payload := pl1;
- flow[1].rtp_cfg.tx_payloads[0].fixed_payload := pl1;
+ flow[1].rtp_cfg.rx_payloads := {};
+ flow[1].rtp_cfg.tx_payloads := {};
+ if (pl1a != ''O) {
+ flow[1].rtp_cfg.rx_payloads := flow[1].rtp_cfg.rx_payloads & {{112, pl1a}};
+ flow[1].rtp_cfg.tx_payloads := flow[1].rtp_cfg.tx_payloads & {{112, pl1a}};
+ }
+
+ /* The second fmtp parameter is to simulate a call agent that offers the transmission both modes. */
+ if (fmtp1b != "") {
+ flow[1].codec_descr := flow[1].codec_descr & {{113, "AMR/8000", fmtp1b}};
+ if (pl1b != ''O) {
+ flow[1].rtp_cfg.rx_payloads := flow[1].rtp_cfg.rx_payloads & {{113, pl1b}};
+ flow[1].rtp_cfg.tx_payloads := flow[1].rtp_cfg.tx_payloads & {{113, pl1b}};
+ }
+ }
+
f_flow_create(RTPEM[1], ep, call_id, "sendrecv", flow[1]);
/* Send RTP packets to connection #0, receive on connection #1 */
@@ -2421,16 +2435,41 @@
const octetstring rtp_amr_5_15k_oa := '100c4e9ba850e30d5d53d04de41e7c'O;
const octetstring rtp_amr_5_15k_bwe := '10d3a6ea1438c35754f41379079f'O;
+ /* Only one codec on each side */
testcase TC_amr_oa_bwe_rtp_conversion() runs on dummy_CT {
- f_TC_amr_x_x_rtp_conversion(rtp_amr_5_90k_oa, rtp_amr_5_90k_bwe, "octet-align=1", "octet-align=0");
+ f_TC_amr_x_x_rtp_conversion("octet-align=1", rtp_amr_5_90k_oa, "octet-align=0", rtp_amr_5_90k_bwe, "", ''O);
}
-
testcase TC_amr_oa_oa_rtp_conversion() runs on dummy_CT {
- f_TC_amr_x_x_rtp_conversion(rtp_amr_5_15k_oa, rtp_amr_5_15k_oa, "octet-align=1", "octet-align=1");
+ f_TC_amr_x_x_rtp_conversion("octet-align=1", rtp_amr_5_15k_oa, "octet-align=1", rtp_amr_5_15k_oa, "", ''O);
+ }
+ testcase TC_amr_bwe_bwe_rtp_conversion() runs on dummy_CT {
+ f_TC_amr_x_x_rtp_conversion("octet-align=0", rtp_amr_5_15k_bwe, "octet-align=0", rtp_amr_5_15k_bwe, "", ''O);
}
- testcase TC_amr_bwe_bwe_rtp_conversion() runs on dummy_CT {
- f_TC_amr_x_x_rtp_conversion(rtp_amr_5_15k_bwe, rtp_amr_5_15k_bwe, "octet-align=0", "octet-align=0");
+ /* Only one codec on one side, two codecs (compatibility) on other side. The payloads are the same on both
+ * sides, so the expectation is that conversion must not be performed. Each test is done with both formats in
+ * two different configurations.*/
+ testcase TC_amr_oa_oa_no_bwe_rtp_conversion() runs on dummy_CT {
+ f_TC_amr_x_x_rtp_conversion("octet-align=1", rtp_amr_5_15k_oa,
+ "octet-align=1", rtp_amr_5_15k_oa,
+ "octet-align=0", ''O); /* We expect to see NO bandwidth efficient packets! */
+ }
+ testcase TC_amr_oa_no_bwe_oa_rtp_conversion() runs on dummy_CT {
+ /* (Same as above but flipped on the opposite side) */
+ f_TC_amr_x_x_rtp_conversion("octet-align=1", rtp_amr_5_15k_oa,
+ "octet-align=0", ''O, /* We expect to see NO bandwidth efficient packets! */
+ "octet-align=1", rtp_amr_5_15k_oa);
+ }
+ testcase TC_amr_bwe_bwe_no_oa_rtp_conversion() runs on dummy_CT {
+ f_TC_amr_x_x_rtp_conversion("octet-align=0", rtp_amr_5_15k_bwe,
+ "octet-align=0", rtp_amr_5_15k_bwe,
+ "octet-align=1", ''O); /* We expect to see NO octet aligned packets! */
+ }
+ testcase TC_amr_bwe_no_oa_bwe_rtp_conversion() runs on dummy_CT {
+ /* (Same as above but flipped on the opposite side) */
+ f_TC_amr_x_x_rtp_conversion("octet-align=0", rtp_amr_5_15k_bwe,
+ "octet-align=1", ''O, /* We expect to see NO octet aligned packets! */
+ "octet-align=0", rtp_amr_5_15k_bwe);
}
/* TODO: Double-DLCX (no retransmission) */
@@ -3028,6 +3067,10 @@
execute(TC_amr_oa_bwe_rtp_conversion());
execute(TC_amr_oa_oa_rtp_conversion());
execute(TC_amr_bwe_bwe_rtp_conversion());
+ execute(TC_amr_oa_oa_no_bwe_rtp_conversion());
+ execute(TC_amr_oa_no_bwe_oa_rtp_conversion());
+ execute(TC_amr_bwe_bwe_no_oa_rtp_conversion());
+ execute(TC_amr_bwe_no_oa_bwe_rtp_conversion());
execute(TC_conn_timeout());
--
To view, visit https://gerrit.osmocom.org/c/osmo-ttcn3-hacks/+/32220
To unsubscribe, or for help writing mail filters, visit https://gerrit.osmocom.org/settings
Gerrit-Project: osmo-ttcn3-hacks
Gerrit-Branch: master
Gerrit-Change-Id: I2b2d7ef7fb4fe31111aa8665c4d4295425502451
Gerrit-Change-Number: 32220
Gerrit-PatchSet: 10
Gerrit-Owner: dexter <pmaier(a)sysmocom.de>
Gerrit-Reviewer: Jenkins Builder
Gerrit-Reviewer: laforge <laforge(a)osmocom.org>
Gerrit-Reviewer: pespin <pespin(a)sysmocom.de>
Gerrit-CC: msuraev <msuraev(a)sysmocom.de>
Gerrit-MessageType: merged
laforge has submitted this change. ( https://gerrit.osmocom.org/c/osmo-ttcn3-hacks/+/32648 )
Change subject: library: Define 'solSACapability' as '0'
......................................................................
library: Define 'solSACapability' as '0'
"according to a comment in f_gmm_attach() there's an encoder problem if it's omit. This sounds like the ts_GMM_ATTACH_REQ()
should be changed to define solSACapability as '0' insteads of omit. At that point none of the users of ts_GMM_ATTACH_REQ
will need to manually modify it anymore."
(quote: hwelte on Gerrit (https://gerrit.osmocom.org/c/osmo-ttcn3-hacks/+/31199/comments/17ed155d_cc5…
Related: OS#4221
Change-Id: I9eaa39274456e5cc0a1cf025bf956970efc4a51f
---
M library/L3_Templates.ttcn
1 file changed, 16 insertions(+), 1 deletion(-)
Approvals:
laforge: Looks good to me, approved
Jenkins Builder: Verified
diff --git a/library/L3_Templates.ttcn b/library/L3_Templates.ttcn
index 1ea8b82..de7063f 100644
--- a/library/L3_Templates.ttcn
+++ b/library/L3_Templates.ttcn
@@ -2209,7 +2209,7 @@
smCapabilitiesviaGPRSChannels := '0'B,
ucs2Support := '1'B,
ssScreeningIndicator := '01'B,
- solSACapability := omit,
+ solSACapability := '0'B,
revisionLevelIndicatior := omit,
pFCFeatureMode := omit,
extendedGEAbits := omit,
--
To view, visit https://gerrit.osmocom.org/c/osmo-ttcn3-hacks/+/32648
To unsubscribe, or for help writing mail filters, visit https://gerrit.osmocom.org/settings
Gerrit-Project: osmo-ttcn3-hacks
Gerrit-Branch: master
Gerrit-Change-Id: I9eaa39274456e5cc0a1cf025bf956970efc4a51f
Gerrit-Change-Number: 32648
Gerrit-PatchSet: 2
Gerrit-Owner: arehbein <arehbein(a)sysmocom.de>
Gerrit-Reviewer: Jenkins Builder
Gerrit-Reviewer: laforge <laforge(a)osmocom.org>
Gerrit-MessageType: merged
laforge has submitted this change. ( https://gerrit.osmocom.org/c/osmo-bts/+/32668 )
Change subject: RTP input, FR & EFR: preen incoming payloads for SID errors
......................................................................
RTP input, FR & EFR: preen incoming payloads for SID errors
Those network elements which receive a stream of codec frames that
may come from the uplink of GSM call A and which are responsible
for preparing the frame stream for the downlink of GSM call B
(such as OsmoBTS receiving RTP and feeding DL to its PHY) must be
prepared for the possibility that their incoming frame stream may
contain corrupted SID frames, presumably from bit errors on radio
link A. Per the rules of section 6.1.1 of GSM 06.31 for FR and
GSM 06.81 for EFR, SID frames with just one errored bit are still
to be accepted as valid, whereas frames with more corrupted bits
which are still recognizable as SID are classified as invalid SID.
In the case of a TrFO call, the entity switching from leg A UL to
leg B DL is responsible for *not* transmitting invalid SID frames
on the destination leg (they should be treated like BFIs), and any
deemed-valid SID frames that are forwarded should be preened,
correcting that one bit error they may exhibit. Implement this
functionality in OsmoBTS.
Change-Id: I89df2f12c49dd5378667cf149d19bde654f80134
---
M src/common/l1sap.c
M src/osmo-bts-omldummy/Makefile.am
2 files changed, 68 insertions(+), 9 deletions(-)
Approvals:
Jenkins Builder: Verified
fixeria: Looks good to me, but someone else must approve
laforge: Looks good to me, approved
diff --git a/src/common/l1sap.c b/src/common/l1sap.c
index a7eb830..f24bc2f 100644
--- a/src/common/l1sap.c
+++ b/src/common/l1sap.c
@@ -37,6 +37,8 @@
#include <osmocom/core/gsmtap_util.h>
#include <osmocom/core/utils.h>
+#include <osmocom/codec/codec.h>
+
#include <osmocom/trau/osmo_ortp.h>
#include <osmo-bts/logging.h>
@@ -1241,6 +1243,24 @@
return true;
}
+static bool rtppayload_validate_fr(struct msgb *msg)
+{
+ if (msg->len != GSM_FR_BYTES)
+ return false;
+ if ((msg->data[0] & 0xF0) != 0xD0)
+ return false;
+ return osmo_fr_sid_preen(msg->data);
+}
+
+static bool rtppayload_validate_efr(struct msgb *msg)
+{
+ if (msg->len != GSM_EFR_BYTES)
+ return false;
+ if ((msg->data[0] & 0xF0) != 0xC0)
+ return false;
+ return osmo_efr_sid_preen(msg->data);
+}
+
static bool rtppayload_is_valid(struct gsm_lchan *lchan, struct msgb *resp_msg)
{
/* If rtp continuous-streaming is enabled, we shall emit RTP packets
@@ -1255,16 +1275,27 @@
if (resp_msg->len == 0)
return false;
- /* Avoid forwarding bw-efficient AMR to lower layers, most bts models
- * don't support it. */
- if (lchan->tch_mode == GSM48_CMODE_SPEECH_AMR &&
- !rtppayload_is_octet_aligned(resp_msg->data, resp_msg->len)) {
- LOGPLCHAN(lchan, DL1P, LOGL_NOTICE,
- "RTP->L1: Dropping unexpected AMR encoding (bw-efficient?) %s\n",
- osmo_hexdump(resp_msg->data, resp_msg->len));
- return false;
+ switch (lchan->tch_mode) {
+ case GSM48_CMODE_SPEECH_V1:
+ if (lchan->type == GSM_LCHAN_TCH_F)
+ return rtppayload_validate_fr(resp_msg);
+ else
+ return true; /* FIXME: implement preening for HR1 */
+ case GSM48_CMODE_SPEECH_EFR:
+ return rtppayload_validate_efr(resp_msg);
+ case GSM48_CMODE_SPEECH_AMR:
+ /* Avoid forwarding bw-efficient AMR to lower layers,
+ * most bts models don't support it. */
+ if (!rtppayload_is_octet_aligned(resp_msg->data, resp_msg->len)) {
+ LOGPLCHAN(lchan, DL1P, LOGL_NOTICE,
+ "RTP->L1: Dropping unexpected AMR encoding (bw-efficient?) %s\n",
+ osmo_hexdump(resp_msg->data, resp_msg->len));
+ return false;
+ }
+ return true;
+ default:
+ return true;
}
- return true;
}
/* TCH-RTS-IND prim received from bts model */
diff --git a/src/osmo-bts-omldummy/Makefile.am b/src/osmo-bts-omldummy/Makefile.am
index 81da29b..f7a0504 100644
--- a/src/osmo-bts-omldummy/Makefile.am
+++ b/src/osmo-bts-omldummy/Makefile.am
@@ -20,6 +20,7 @@
$(LIBOSMOABIS_LIBS) \
$(LIBOSMOTRAU_LIBS) \
$(LIBOSMONETIF_LIBS) \
+ $(LIBOSMOCODEC_LIBS) \
-ldl \
$(NULL)
--
To view, visit https://gerrit.osmocom.org/c/osmo-bts/+/32668
To unsubscribe, or for help writing mail filters, visit https://gerrit.osmocom.org/settings
Gerrit-Project: osmo-bts
Gerrit-Branch: master
Gerrit-Change-Id: I89df2f12c49dd5378667cf149d19bde654f80134
Gerrit-Change-Number: 32668
Gerrit-PatchSet: 1
Gerrit-Owner: falconia <falcon(a)freecalypso.org>
Gerrit-Reviewer: Jenkins Builder
Gerrit-Reviewer: fixeria <vyanitskiy(a)sysmocom.de>
Gerrit-Reviewer: laforge <laforge(a)osmocom.org>
Gerrit-MessageType: merged