fixeria has uploaded this change for review. (
https://gerrit.osmocom.org/c/osmocom-bb/+/32916 )
Change subject: trxcon/l1sched: remove redundant TCH/[FH] prim length checks
......................................................................
trxcon/l1sched: remove redundant TCH/[FH] prim length checks
Both gsm0503_tch_[fh]r_encode() do check the given payload length in
order to determine the payload and/or codec type. The same applies
to gsm0503_tch_a[fh]s_encode(). There is no real need to implement
additional length checks on top of that - drop them.
Change-Id: Ib1adf4945fb762bc2a51a1008f6bef6784fb7833
Related: OS#4396
---
M src/host/trxcon/src/sched_lchan_tchf.c
M src/host/trxcon/src/sched_lchan_tchh.c
2 files changed, 44 insertions(+), 57 deletions(-)
git pull ssh://gerrit.osmocom.org:29418/osmocom-bb refs/changes/16/32916/1
diff --git a/src/host/trxcon/src/sched_lchan_tchf.c
b/src/host/trxcon/src/sched_lchan_tchf.c
index 326713d..fca2108 100644
--- a/src/host/trxcon/src/sched_lchan_tchf.c
+++ b/src/host/trxcon/src/sched_lchan_tchf.c
@@ -219,7 +219,6 @@
ubit_t *buffer, *offset;
const uint8_t *tsc;
uint8_t *mask;
- size_t l2_len;
int rc;
/* Set up pointers */
@@ -238,10 +237,16 @@
memcpy(buffer, buffer + 464, 464);
/* populate the buffer with bursts */
- if (msgb_l2len(lchan->prim) == GSM_MACBLOCK_LEN) {
- /* Encode payload */
- rc = gsm0503_tch_fr_encode(buffer, msgb_l2(lchan->prim), GSM_MACBLOCK_LEN, 1);
- } else if (lchan->tch_mode == GSM48_CMODE_SPEECH_AMR) {
+ switch (lchan->tch_mode) {
+ case GSM48_CMODE_SIGN:
+ case GSM48_CMODE_SPEECH_V1:
+ case GSM48_CMODE_SPEECH_EFR:
+ rc = gsm0503_tch_fr_encode(buffer,
+ msgb_l2(lchan->prim),
+ msgb_l2len(lchan->prim), 1);
+ break;
+ case GSM48_CMODE_SPEECH_AMR:
+ {
int len;
uint8_t cmr_codec;
int ft, cmr, i;
@@ -295,31 +300,11 @@
lchan->amr.codecs,
lchan->amr.ul_ft,
lchan->amr.ul_cmr);
- } else {
- /* Determine and check the payload length */
- switch (lchan->tch_mode) {
- case GSM48_CMODE_SIGN:
- case GSM48_CMODE_SPEECH_V1: /* FR */
- l2_len = GSM_FR_BYTES;
- break;
- case GSM48_CMODE_SPEECH_EFR: /* EFR */
- l2_len = GSM_EFR_BYTES;
- break;
- default:
- LOGP_LCHAND(lchan, LOGL_ERROR,
- "Invalid TCH mode: %u, dropping frame...\n",
- lchan->tch_mode);
- l1sched_lchan_prim_drop(lchan);
- return -EINVAL;
- }
- if (msgb_l2len(lchan->prim) != l2_len) {
- LOGP_LCHAND(lchan, LOGL_ERROR, "Primitive has odd length %u "
- "(expected %zu for TCH or %u for FACCH), so dropping...\n",
- msgb_l2len(lchan->prim), l2_len, GSM_MACBLOCK_LEN);
- l1sched_lchan_prim_drop(lchan);
- return -EINVAL;
- }
- rc = gsm0503_tch_fr_encode(buffer, msgb_l2(lchan->prim), l2_len, 1);
+ break;
+ }
+ default:
+ LOGP_LCHAND(lchan, LOGL_ERROR, "Invalid TCH mode: %u\n",
lchan->tch_mode);
+ return -EINVAL;
}
if (rc) {
diff --git a/src/host/trxcon/src/sched_lchan_tchh.c
b/src/host/trxcon/src/sched_lchan_tchh.c
index 34781d3..e3e4cde 100644
--- a/src/host/trxcon/src/sched_lchan_tchh.c
+++ b/src/host/trxcon/src/sched_lchan_tchh.c
@@ -425,7 +425,6 @@
ubit_t *buffer, *offset;
const uint8_t *tsc;
uint8_t *mask;
- size_t l2_len;
int rc;
/* Set up pointers */
@@ -459,10 +458,15 @@
}
/* populate the buffer with bursts */
- if (msgb_l2len(lchan->prim) == GSM_MACBLOCK_LEN) {
- rc = gsm0503_tch_hr_encode(buffer, msgb_l2(lchan->prim), GSM_MACBLOCK_LEN);
- lchan->ul_facch_blocks = 6;
- } else if (lchan->tch_mode == GSM48_CMODE_SPEECH_AMR) {
+ switch (lchan->tch_mode) {
+ case GSM48_CMODE_SIGN:
+ case GSM48_CMODE_SPEECH_V1:
+ rc = gsm0503_tch_hr_encode(buffer,
+ msgb_l2(lchan->prim),
+ msgb_l2len(lchan->prim));
+ break;
+ case GSM48_CMODE_SPEECH_AMR:
+ {
int len;
uint8_t cmr_codec;
int ft, cmr, i;
@@ -516,28 +520,11 @@
lchan->amr.codecs,
lchan->amr.ul_ft,
lchan->amr.ul_cmr);
- } else {
- /* Determine and check the payload length */
- switch (lchan->tch_mode) {
- case GSM48_CMODE_SIGN:
- case GSM48_CMODE_SPEECH_V1: /* HR */
- l2_len = GSM_HR_BYTES + 1;
- break;
- default:
- LOGP_LCHAND(lchan, LOGL_ERROR,
- "Invalid TCH mode: %u, dropping frame...\n",
- lchan->tch_mode);
- l1sched_lchan_prim_drop(lchan);
- return -EINVAL;
- }
- if (msgb_l2len(lchan->prim) != l2_len) {
- LOGP_LCHAND(lchan, LOGL_ERROR, "Primitive has odd length %u "
- "(expected %zu for TCH or %u for FACCH), so dropping...\n",
- msgb_l2len(lchan->prim), l2_len, GSM_MACBLOCK_LEN);
- l1sched_lchan_prim_drop(lchan);
- return -EINVAL;
- }
- rc = gsm0503_tch_hr_encode(buffer, msgb_l2(lchan->prim), l2_len);
+ break;
+ }
+ default:
+ LOGP_LCHAND(lchan, LOGL_ERROR, "Invalid TCH mode: %u\n",
lchan->tch_mode);
+ return -EINVAL;
}
if (rc) {
--
To view, visit
https://gerrit.osmocom.org/c/osmocom-bb/+/32916
To unsubscribe, or for help writing mail filters, visit
https://gerrit.osmocom.org/settings
Gerrit-Project: osmocom-bb
Gerrit-Branch: master
Gerrit-Change-Id: Ib1adf4945fb762bc2a51a1008f6bef6784fb7833
Gerrit-Change-Number: 32916
Gerrit-PatchSet: 1
Gerrit-Owner: fixeria <vyanitskiy(a)sysmocom.de>
Gerrit-MessageType: newchange