Change in osmocom-bb[master]: mobile: traffic req check: support EFR

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/.

osmith gerrit-no-reply at lists.osmocom.org
Mon May 4 13:10:43 UTC 2020


osmith has uploaded this change for review. ( https://gerrit.osmocom.org/c/osmocom-bb/+/18021 )


Change subject: mobile: traffic req check: support EFR
......................................................................

mobile: traffic req check: support EFR

While at it, move to extra function and add a length check.

Related: SYS#4924
Change-Id: Iba84f5d60ff5b1a2db8fb6af5131e185965df7c9
---
M src/host/layer23/src/common/l1ctl.c
1 file changed, 37 insertions(+), 3 deletions(-)



  git pull ssh://gerrit.osmocom.org:29418/osmocom-bb refs/changes/21/18021/1

diff --git a/src/host/layer23/src/common/l1ctl.c b/src/host/layer23/src/common/l1ctl.c
index b7d0ecd..37a29e6 100644
--- a/src/host/layer23/src/common/l1ctl.c
+++ b/src/host/layer23/src/common/l1ctl.c
@@ -888,6 +888,42 @@
 	return 0;
 }
 
+#define LOG_TRAFFIC_REQ(mode, level, fmt, args...) \
+	LOGP(DL1C, level, "Traffic Request, mode=%s: " fmt, get_value_string(gsm48_chan_mode_names, mode), ## args)
+
+int traffic_req_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 != 13) {
+			LOG_TRAFFIC_REQ(mode, LOGL_ERROR, "incorrect length (%zu != 13)\n", frame_len);
+			return -2;
+		}
+		if ((frame[0] >> 4) != 0xd) {
+			LOG_TRAFFIC_REQ(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 != 31) {
+			LOG_TRAFFIC_REQ(mode, LOGL_ERROR, "incorrect length (%zu != 31)\n", frame_len);
+			return -4;
+		}
+		if ((frame[0] >> 4) != 0xc) {
+			LOG_TRAFFIC_REQ(mode, LOGL_ERROR, "incorrect magic (%u != 0xc)\n", frame[0] >> 4);
+			return -5;
+		}
+		break;
+	default:
+		LOG_TRAFFIC_REQ(mode, LOGL_ERROR, "not implemented\n");
+		return -1;
+	}
+	return 0;
+}
+
 /* Transmit L1CTL_TRAFFIC_REQ (Traffic Request to L1) */
 int l1ctl_tx_traffic_req(struct osmocom_ms *ms, struct msgb *msg,
                        uint8_t chan_nr, uint8_t link_id)
@@ -909,9 +945,7 @@
 	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);
+	if (traffic_req_frame_verify(ms->rrlayer.cd_now.mode, frame, frame_len) < 0) {
 		msgb_free(msg);
 		return -EINVAL;
 	}

-- 
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: 1
Gerrit-Owner: osmith <osmith at sysmocom.de>
Gerrit-MessageType: newchange
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.osmocom.org/pipermail/gerrit-log/attachments/20200504/4a7c9bf3/attachment.htm>


More information about the gerrit-log mailing list