[PATCH] osmocom-bb[master]: host/trxcon/l1ctl.c: fix L1CTL_RACH_{REQ, CONF} handling

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

Harald Welte gerrit-no-reply at lists.osmocom.org
Thu Feb 22 15:33:03 UTC 2018


Review at  https://gerrit.osmocom.org/6729

host/trxcon/l1ctl.c: fix L1CTL_RACH_{REQ,CONF} handling

Previously, L1CTL_RACH_REQ / L1CTL_RACH_CONF messages were
handled without l1ctl_info_ul / l1ctl_info_dl header, what
caused incorrect data parsing.

Change-Id: I145d137f2cc7de234965e4fe64d9367ed6ccb999
---
M src/host/trxcon/l1ctl.c
M src/host/trxcon/l1ctl.h
M src/host/trxcon/sched_lchan_handlers.c
3 files changed, 18 insertions(+), 11 deletions(-)


  git pull ssh://gerrit.osmocom.org:29418/osmocom-bb refs/changes/29/6729/1

diff --git a/src/host/trxcon/l1ctl.c b/src/host/trxcon/l1ctl.c
index 9b0d35a..3e9732f 100644
--- a/src/host/trxcon/l1ctl.c
+++ b/src/host/trxcon/l1ctl.c
@@ -197,13 +197,22 @@
 	return l1ctl_link_send(l1l, msg);
 }
 
-int l1ctl_tx_rach_conf(struct l1ctl_link *l1l)
+int l1ctl_tx_rach_conf(struct l1ctl_link *l1l, uint32_t fn)
 {
+	struct l1ctl_info_dl *dl;
 	struct msgb *msg;
+	size_t len;
 
 	msg = l1ctl_alloc_msg(L1CTL_RACH_CONF);
 	if (msg == NULL)
 		return -ENOMEM;
+
+	len = sizeof(struct l1ctl_info_dl);
+	dl = (struct l1ctl_info_dl *) msgb_put(msg, len);
+
+	memset(dl, 0x00, len);
+	dl->band_arfcn = htons(l1l->trx->band_arfcn);
+	dl->frame_nr = htonl(fn);
 
 	return l1ctl_link_send(l1l, msg);
 }
@@ -369,22 +378,20 @@
 static int l1ctl_rx_rach_req(struct l1ctl_link *l1l, struct msgb *msg)
 {
 	struct l1ctl_rach_req *req;
+	struct l1ctl_info_ul *ul;
 	struct trx_ts_prim *prim;
 	struct trx_ts *ts;
 	int len, rc = 0;
 
-	req = (struct l1ctl_rach_req *) msg->l1h;
-	len = sizeof(*req);
-	if (msgb_l1len(msg) < len) {
-		LOGP(DL1C, LOGL_ERROR, "MSG too short RACH Req: %d\n", len);
-		rc = -EINVAL;
-		goto exit;
-	}
+	ul = (struct l1ctl_info_ul *) msg->l1h;
+	req = (struct l1ctl_rach_req *) ul->payload;
+	len = sizeof(struct l1ctl_rach_req);
 
 	/* Convert offset value to host format */
 	req->offset = ntohs(req->offset);
 
-	LOGP(DL1C, LOGL_DEBUG, "Recv RACH Req (offset=%u)\n", req->offset);
+	LOGP(DL1C, LOGL_DEBUG, "Recv RACH Req (offset=%u ra=0x%02x)\n",
+		req->offset, req->ra);
 
 	/* FIXME: can we use other than TS0? */
 	ts = sched_trx_find_ts(l1l->trx, 0);
diff --git a/src/host/trxcon/l1ctl.h b/src/host/trxcon/l1ctl.h
index af53b77..596a5b0 100644
--- a/src/host/trxcon/l1ctl.h
+++ b/src/host/trxcon/l1ctl.h
@@ -16,4 +16,4 @@
 int l1ctl_rx_cb(struct l1ctl_link *l1l, struct msgb *msg);
 
 int l1ctl_tx_data_ind(struct l1ctl_link *l1l, struct l1ctl_info_dl *ind);
-int l1ctl_tx_rach_conf(struct l1ctl_link *l1l);
+int l1ctl_tx_rach_conf(struct l1ctl_link *l1l, uint32_t fn);
diff --git a/src/host/trxcon/sched_lchan_handlers.c b/src/host/trxcon/sched_lchan_handlers.c
index 64893d7..b27f811 100644
--- a/src/host/trxcon/sched_lchan_handlers.c
+++ b/src/host/trxcon/sched_lchan_handlers.c
@@ -303,7 +303,7 @@
 	}
 
 	/* Confirm RACH request */
-	l1ctl_tx_rach_conf(trx->l1l);
+	l1ctl_tx_rach_conf(trx->l1l, fn);
 
 	/* Remove primitive from queue and free memory */
 	llist_del(&prim->list);

-- 
To view, visit https://gerrit.osmocom.org/6729
To unsubscribe, visit https://gerrit.osmocom.org/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: I145d137f2cc7de234965e4fe64d9367ed6ccb999
Gerrit-PatchSet: 1
Gerrit-Project: osmocom-bb
Gerrit-Branch: master
Gerrit-Owner: Harald Welte <laforge at gnumonks.org>



More information about the gerrit-log mailing list