fixeria has uploaded this change for review.

View Change

modem: add test VTY command to send CHANNEL REQUEST

Do not call grr_tx_chan_req() unconditionally from grr_rx_bcch().
Add a special (hidden, expert mode) VTY command for that.

Change-Id: I049a8d7f58ae9703d06dff235973ba376702c873
Related: OS#5500
---
M src/host/layer23/include/osmocom/bb/modem/grr.h
M src/host/layer23/src/modem/grr.c
M src/host/layer23/src/modem/vty.c
3 files changed, 52 insertions(+), 7 deletions(-)

git pull ssh://gerrit.osmocom.org:29418/osmocom-bb refs/changes/56/31656/1
diff --git a/src/host/layer23/include/osmocom/bb/modem/grr.h b/src/host/layer23/include/osmocom/bb/modem/grr.h
index 208dbb1..1f2b08c 100644
--- a/src/host/layer23/include/osmocom/bb/modem/grr.h
+++ b/src/host/layer23/include/osmocom/bb/modem/grr.h
@@ -1,6 +1,12 @@
#pragma once

+#include <stdbool.h>
+#include <stdint.h>
+
struct msgb;
+struct osmocom_ms;
struct lapdm_entity;

int modem_grr_rslms_cb(struct msgb *msg, struct lapdm_entity *le, void *ctx);
+int modem_grr_tx_chan_req(struct osmocom_ms *ms, uint8_t chan_req);
+uint8_t modem_grr_gen_chan_req(bool single_block);
diff --git a/src/host/layer23/src/modem/grr.c b/src/host/layer23/src/modem/grr.c
index e46f77d..b22832e 100644
--- a/src/host/layer23/src/modem/grr.c
+++ b/src/host/layer23/src/modem/grr.c
@@ -47,7 +47,7 @@
#include <l1ctl_proto.h>

/* Generate an 8-bit CHANNEL REQUEST message as per 3GPP TS 44.018, 9.1.8 */
-static uint8_t grr_gen_chan_req(bool single_block)
+uint8_t modem_grr_gen_chan_req(bool single_block)
{
uint8_t rnd = (uint8_t)rand();

@@ -76,7 +76,7 @@
return false;
}

-static int grr_tx_chan_req(struct osmocom_ms *ms, bool single_block)
+int modem_grr_tx_chan_req(struct osmocom_ms *ms, uint8_t chan_req)
{
struct gsm322_cellsel *cs = &ms->cellsel;
struct gsm48_rrlayer *rr = &ms->rrlayer;
@@ -88,7 +88,7 @@
if (!cs->sel_si.gprs.supported)
return -ENOTSUP;

- rr->cr_ra = grr_gen_chan_req(single_block);
+ rr->cr_ra = chan_req;
memset(&rr->cr_hist[0], 0x00, sizeof(rr->cr_hist));

LOGP(DRR, LOGL_NOTICE, "Sending CHANNEL REQUEST (0x%02x)\n", rr->cr_ra);
@@ -209,10 +209,6 @@
LOGP(DRR, LOGL_INFO, "BCCH message (type=0x%02x): %s\n",
si_type, gsm48_rr_msg_name(si_type));

- /* HACK: request an Uplink TBF here (one phase access) */
- if (ms->rrlayer.state == GSM48_RR_ST_IDLE)
- grr_tx_chan_req(ms, false);
-
switch (si_type) {
case GSM48_MT_RR_SYSINFO_1:
return grr_handle_si1(ms, msg);
diff --git a/src/host/layer23/src/modem/vty.c b/src/host/layer23/src/modem/vty.c
index e462a23..b8e0e2d 100644
--- a/src/host/layer23/src/modem/vty.c
+++ b/src/host/layer23/src/modem/vty.c
@@ -30,6 +30,7 @@
#include <osmocom/bb/common/vty.h>
#include <osmocom/bb/common/apn.h>
#include <osmocom/bb/common/ms.h>
+#include <osmocom/bb/modem/grr.h>
#include <osmocom/bb/modem/vty.h>

static struct cmd_node apn_node = {
@@ -52,6 +53,34 @@
return vty->node;
}

+#define MS_NAME_DESC "Name of MS (see \"show ms\")\n"
+#define TEST_CMD_DESC "Testing commands for developers\n"
+#define GRR_CMDG_DESC "GPRS RR specific commands\n"
+
+/* testing commands */
+DEFUN_HIDDEN(test_grr_tx_chan_req,
+ test_grr_tx_chan_req_cmd,
+ "test MS_NAME grr tx-chan-req (1phase|2phase)",
+ TEST_CMD_DESC MS_NAME_DESC GRR_CMDG_DESC
+ "Send a CHANNEL REQUEST (RACH) to the network\n"
+ "One-phase packet access (011110xx or 01111x0x or 01111xx0)\n"
+ "Two-phase (single block) packet access (01110xxx)\n")
+{
+ struct osmocom_ms *ms;
+ uint8_t chan_req;
+
+ if ((ms = l23_vty_get_ms(argv[0], vty)) == NULL)
+ return CMD_WARNING;
+
+ chan_req = modem_grr_gen_chan_req(argv[1][0] == '2');
+ if (modem_grr_tx_chan_req(ms, chan_req) != 0) {
+ vty_out(vty, "Failed to send a CHANNEL REQUEST%s", VTY_NEWLINE);
+ return CMD_WARNING;
+ }
+
+ return CMD_SUCCESS;
+}
+
/* per APN config */
DEFUN(cfg_ms_apn, cfg_ms_apn_cmd, "apn APN_NAME",
"Configure an APN\n"
@@ -232,6 +261,7 @@
if ((rc = l23_vty_init(config_write, NULL)) < 0)
return rc;
install_element_ve(&l23_show_ms_cmd);
+ install_element_ve(&test_grr_tx_chan_req_cmd);
install_element(CONFIG_NODE, &l23_cfg_ms_cmd);

install_element(MS_NODE, &cfg_ms_apn_cmd);

To view, visit change 31656. To unsubscribe, or for help writing mail filters, visit settings.

Gerrit-Project: osmocom-bb
Gerrit-Branch: master
Gerrit-Change-Id: I049a8d7f58ae9703d06dff235973ba376702c873
Gerrit-Change-Number: 31656
Gerrit-PatchSet: 1
Gerrit-Owner: fixeria <vyanitskiy@sysmocom.de>
Gerrit-MessageType: newchange