This is merely a historical archive of years 2008-2021, before the migration to mailman3.
A maintained and still updated list archive can be found at https://lists.osmocom.org/hyperkitty/list/gerrit-log@lists.osmocom.org/.
laforge gerrit-no-reply at lists.osmocom.orglaforge has submitted this change. ( https://gerrit.osmocom.org/c/osmocom-bb/+/18021 )
Change subject: mobile: traffic req check: support EFR
......................................................................
mobile: traffic req check: support EFR
L1CTL handling code should not be involved in such high level checks, so
while at it, move the check into a separate function in gsm48_rr.c and
add a length check. gsm48_rr_tx_voice() is the only caller of
l1ctl_tx_traffic_req().
Related: SYS#4924
Change-Id: Iba84f5d60ff5b1a2db8fb6af5131e185965df7c9
---
M src/host/layer23/src/common/l1ctl.c
M src/host/layer23/src/mobile/gsm48_rr.c
2 files changed, 47 insertions(+), 11 deletions(-)
Approvals:
Jenkins Builder: Verified
laforge: Looks good to me, approved
diff --git a/src/host/layer23/src/common/l1ctl.c b/src/host/layer23/src/common/l1ctl.c
index b7d0ecd..54c7452 100644
--- a/src/host/layer23/src/common/l1ctl.c
+++ b/src/host/layer23/src/common/l1ctl.c
@@ -909,13 +909,6 @@
DEBUGP(DL1C, "TRAFFIC REQ len=%zu (%s)\n", frame_len,
osmo_hexdump(frame, frame_len));
- if ((frame[0] >> 4) != 0xd) {
- LOGP(DL1C, LOGL_ERROR, "Traffic Request has incorrect magic "
- "(%u != 0xd)\n", frame[0] >> 4);
- msgb_free(msg);
- return -EINVAL;
- }
-
// printf("TX %s\n", osmo_hexdump(frame, frame_len));
/* prepend uplink info header */
diff --git a/src/host/layer23/src/mobile/gsm48_rr.c b/src/host/layer23/src/mobile/gsm48_rr.c
index b3da258..fdc9916 100644
--- a/src/host/layer23/src/mobile/gsm48_rr.c
+++ b/src/host/layer23/src/mobile/gsm48_rr.c
@@ -71,6 +71,7 @@
#include <osmocom/gsm/rsl.h>
#include <osmocom/gsm/gsm48.h>
#include <osmocom/core/bitvec.h>
+#include <osmocom/codec/codec.h>
#include <osmocom/bb/common/osmocom_data.h>
#include <osmocom/bb/common/l1l2_interface.h>
@@ -5624,25 +5625,67 @@
#endif
+#define LOG_FRAME_VERIFY(mode, level, fmt, args...) \
+ LOGP(DRR, level, "Voice frame, mode=%s: " fmt, get_value_string(gsm48_chan_mode_names, mode), ## args)
+
+int voice_frame_verify(enum gsm48_chan_mode mode, uint8_t *frame, size_t frame_len)
+{
+ switch (mode) {
+ case GSM48_CMODE_SPEECH_V1:
+ /* FIXME: this is FR only, check for TCH/F (FR) and TCH/H (HR) */
+ /* RFC 3551, section 4.5.8 GSM */
+ if (frame_len != GSM_FR_BYTES) {
+ LOG_FRAME_VERIFY(mode, LOGL_ERROR, "incorrect length (%zu != %u)\n", frame_len, GSM_FR_BYTES);
+ return -2;
+ }
+ if ((frame[0] >> 4) != 0xd) {
+ LOG_FRAME_VERIFY(mode, LOGL_ERROR, "incorrect magic (%u != 0xd)\n", frame[0] >> 4);
+ return -3;
+ }
+ break;
+ case GSM48_CMODE_SPEECH_EFR:
+ /* RFC 3551, section 4.5.9 GSM-EFR */
+ if (frame_len != GSM_EFR_BYTES) {
+ LOG_FRAME_VERIFY(mode, LOGL_ERROR, "incorrect length (%zu != %u)\n", frame_len, GSM_EFR_BYTES);
+ return -4;
+ }
+ if ((frame[0] >> 4) != 0xc) {
+ LOG_FRAME_VERIFY(mode, LOGL_ERROR, "incorrect magic (%u != 0xc)\n", frame[0] >> 4);
+ return -5;
+ }
+ break;
+ default:
+ LOG_FRAME_VERIFY(mode, LOGL_ERROR, "not implemented\n");
+ return -1;
+ }
+ return 0;
+}
+
int gsm48_rr_tx_voice(struct osmocom_ms *ms, struct msgb *msg)
{
struct gsm48_rrlayer *rr = &ms->rrlayer;
uint8_t ch_type, ch_subch, ch_ts;
+ struct l1ctl_traffic_req *tr;
if (!rr->dm_est) {
LOGP(DRR, LOGL_INFO, "Current channel is not active\n");
- msgb_free(msg);
- return -ENOTSUP;
+ goto error;
}
rsl_dec_chan_nr(rr->cd_now.chan_nr, &ch_type, &ch_subch, &ch_ts);
if (ch_type != RSL_CHAN_Bm_ACCHs) {
LOGP(DRR, LOGL_INFO, "Current channel is not (yet) TCH/F\n");
- msgb_free(msg);
- return -ENOTSUP;
+ goto error;
}
+ tr = (struct l1ctl_traffic_req *)msg->l2h;
+ if (voice_frame_verify(rr->cd_now.mode, tr->data, msgb_l2len(msg)) < 0)
+ goto error;
+
return l1ctl_tx_traffic_req(ms, msg, rr->cd_now.chan_nr, 0);
+error:
+ msgb_free(msg);
+ return -ENOTSUP;
}
int gsm48_rr_audio_mode(struct osmocom_ms *ms, uint8_t mode)
--
To view, visit https://gerrit.osmocom.org/c/osmocom-bb/+/18021
To unsubscribe, or for help writing mail filters, visit https://gerrit.osmocom.org/settings
Gerrit-Project: osmocom-bb
Gerrit-Branch: master
Gerrit-Change-Id: Iba84f5d60ff5b1a2db8fb6af5131e185965df7c9
Gerrit-Change-Number: 18021
Gerrit-PatchSet: 3
Gerrit-Owner: osmith <osmith at sysmocom.de>
Gerrit-Reviewer: Jenkins Builder
Gerrit-Reviewer: fixeria <axilirator at gmail.com>
Gerrit-Reviewer: laforge <laforge at osmocom.org>
Gerrit-Reviewer: osmith <osmith at sysmocom.de>
Gerrit-MessageType: merged
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.osmocom.org/pipermail/gerrit-log/attachments/20200506/0efb6ff4/attachment.htm>