pespin has submitted this change. (
https://gerrit.osmocom.org/c/osmocom-bb/+/30943 )
Change subject: layer23: Introduce l23_app_start() API step
......................................................................
layer23: Introduce l23_app_start() API step
This commit is a preparation towards having shared VTY infrastructure
for layer23 apps. Having 2 steps (first init(), then start()) allows
the apps easily struct allocation & initialization, and then start doing
work after VTY config has been read.
Change-Id: I1d232809764962f82fee86159bc61cdbc3eb3c48
---
M src/host/layer23/include/osmocom/bb/common/l23_app.h
M src/host/layer23/src/common/main.c
M src/host/layer23/src/misc/app_bcch_scan.c
M src/host/layer23/src/misc/app_cbch_sniff.c
M src/host/layer23/src/misc/app_ccch_scan.c
M src/host/layer23/src/misc/app_cell_log.c
M src/host/layer23/src/modem/app_modem.c
7 files changed, 66 insertions(+), 24 deletions(-)
Approvals:
Jenkins Builder: Verified
laforge: Looks good to me, but someone else must approve
pespin: Looks good to me, approved
fixeria: Looks good to me, but someone else must approve
diff --git a/src/host/layer23/include/osmocom/bb/common/l23_app.h
b/src/host/layer23/include/osmocom/bb/common/l23_app.h
index d5f0fd3..a37e1e0 100644
--- a/src/host/layer23/include/osmocom/bb/common/l23_app.h
+++ b/src/host/layer23/include/osmocom/bb/common/l23_app.h
@@ -13,9 +13,13 @@
L23_OPT_VTYIP = 32,
};
-/* initialization, called once when starting the app, before entering
- * select loop */
+/* initialization, called once when starting the app, before reading VTY config */
extern int l23_app_init(struct osmocom_ms *ms);
+
+/* Start work after reading VTY config and starting layer23 components,
+ * immediately before entering main select loop */
+extern int (*l23_app_start)(struct osmocom_ms *ms);
+
extern int (*l23_app_work)(struct osmocom_ms *ms);
extern int (*l23_app_exit)(struct osmocom_ms *ms);
diff --git a/src/host/layer23/src/common/main.c b/src/host/layer23/src/common/main.c
index 6841313..dcf557f 100644
--- a/src/host/layer23/src/common/main.c
+++ b/src/host/layer23/src/common/main.c
@@ -54,6 +54,7 @@
static char *vty_ip = "127.0.0.1";
unsigned short vty_port = 4247;
+int (*l23_app_start)(struct osmocom_ms *ms) = NULL;
int (*l23_app_work)(struct osmocom_ms *ms) = NULL;
int (*l23_app_exit)(struct osmocom_ms *ms) = NULL;
int quit = 0;
@@ -249,15 +250,6 @@
ms->name = talloc_strdup(ms, "1");
ms->test_arfcn = 871;
-
- handle_options(argc, argv);
-
- rc = layer2_open(ms, layer2_socket_path);
- if (rc < 0) {
- fprintf(stderr, "Failed during layer2_open()\n");
- exit(1);
- }
-
ms->lapdm_channel.lapdm_dcch.l1_ctx = ms;
ms->lapdm_channel.lapdm_dcch.l3_ctx = ms;
ms->lapdm_channel.lapdm_acch.l1_ctx = ms;
@@ -265,9 +257,19 @@
lapdm_channel_init(&ms->lapdm_channel, LAPDM_MODE_MS);
lapdm_channel_set_l1(&ms->lapdm_channel, l1ctl_ph_prim_cb, ms);
+ handle_options(argc, argv);
+
rc = l23_app_init(ms);
- if (rc < 0)
+ if (rc < 0) {
+ fprintf(stderr, "Failed during l23_app_init()\n");
exit(1);
+ }
+
+ rc = layer2_open(ms, layer2_socket_path);
+ if (rc < 0) {
+ fprintf(stderr, "Failed during layer2_open()\n");
+ exit(1);
+ }
if (gsmtap_ip) {
gsmtap_inst = gsmtap_source_init(gsmtap_ip, GSMTAP_UDP_PORT, 1);
@@ -278,6 +280,14 @@
gsmtap_source_add_sink(gsmtap_inst);
}
+ if (l23_app_start) {
+ rc = l23_app_start(ms);
+ if (rc < 0) {
+ fprintf(stderr, "Failed during l23_app_start()\n");
+ exit(1);
+ }
+ }
+
signal(SIGINT, sighandler);
signal(SIGHUP, sighandler);
signal(SIGTERM, sighandler);
diff --git a/src/host/layer23/src/misc/app_bcch_scan.c
b/src/host/layer23/src/misc/app_bcch_scan.c
index 257469c..fc9bca8 100644
--- a/src/host/layer23/src/misc/app_bcch_scan.c
+++ b/src/host/layer23/src/misc/app_bcch_scan.c
@@ -47,11 +47,17 @@
return 0;
}
+static int _bcch_scan_start(struct osmocom_ms *ms)
+{
+ l1ctl_tx_reset_req(ms, L1CTL_RES_T_FULL);
+ return 0;
+}
+
int l23_app_init(struct osmocom_ms *ms)
{
/* don't do layer3_init() as we don't want an actual L3 */
fps_init();
- l1ctl_tx_reset_req(ms, L1CTL_RES_T_FULL);
+ l23_app_start = _bcch_scan_start;
return osmo_signal_register_handler(SS_L1CTL, &signal_cb, NULL);
}
diff --git a/src/host/layer23/src/misc/app_cbch_sniff.c
b/src/host/layer23/src/misc/app_cbch_sniff.c
index 76d4537..d5424ba 100644
--- a/src/host/layer23/src/misc/app_cbch_sniff.c
+++ b/src/host/layer23/src/misc/app_cbch_sniff.c
@@ -194,17 +194,22 @@
return 0;
}
-int l23_app_init(struct osmocom_ms *ms)
+static int _cbch_sniff_start(struct osmocom_ms *ms)
{
- /* don't do layer3_init() as we don't want an actual L3 */
-
- g_ms = ms;
- lapdm_channel_set_l3(&ms->lapdm_channel, &rcv_rsl, ms);
-
l1ctl_tx_reset_req(ms, L1CTL_RES_T_FULL);
/* FIXME: L1CTL_RES_T_FULL doesn't reset dedicated mode
* (if previously set), so we release it here. */
l1ctl_tx_dm_rel_req(ms);
+ return 0;
+}
+
+int l23_app_init(struct osmocom_ms *ms)
+{
+ /* don't do layer3_init() as we don't want an actual L3 */
+ l23_app_start = _cbch_sniff_start;
+ g_ms = ms;
+
+ lapdm_channel_set_l3(&ms->lapdm_channel, &rcv_rsl, ms);
return osmo_signal_register_handler(SS_L1CTL, &signal_cb, NULL);
}
diff --git a/src/host/layer23/src/misc/app_ccch_scan.c
b/src/host/layer23/src/misc/app_ccch_scan.c
index 04afdcf..cfb4392 100644
--- a/src/host/layer23/src/misc/app_ccch_scan.c
+++ b/src/host/layer23/src/misc/app_ccch_scan.c
@@ -490,11 +490,17 @@
return 0;
}
+static int _ccch_scan_start(struct osmocom_ms *ms)
+{
+ l1ctl_tx_reset_req(ms, L1CTL_RES_T_FULL);
+ return 0;
+}
int l23_app_init(struct osmocom_ms *ms)
{
+ l23_app_start = _ccch_scan_start;
+
osmo_signal_register_handler(SS_L1CTL, &signal_cb, NULL);
- l1ctl_tx_reset_req(ms, L1CTL_RES_T_FULL);
return layer3_init(ms);
}
diff --git a/src/host/layer23/src/misc/app_cell_log.c
b/src/host/layer23/src/misc/app_cell_log.c
index abc472d..f1596c3 100644
--- a/src/host/layer23/src/misc/app_cell_log.c
+++ b/src/host/layer23/src/misc/app_cell_log.c
@@ -42,6 +42,13 @@
char *logname = "/dev/null";
int RACH_MAX = 2;
+
+int _scan_start(struct osmocom_ms *ms)
+{
+ l1ctl_tx_reset_req(ms, L1CTL_RES_T_FULL);
+ return 0;
+}
+
int _scan_work(struct osmocom_ms *ms)
{
return 0;
@@ -70,6 +77,7 @@
log_parse_category_mask(osmo_stderr_target, "DSUM");
log_set_log_level(osmo_stderr_target, LOGL_INFO);
+ l23_app_start = _scan_start;
l23_app_work = _scan_work;
l23_app_exit = _scan_exit;
@@ -77,7 +85,6 @@
if (rc)
return rc;
- l1ctl_tx_reset_req(ms, L1CTL_RES_T_FULL);
printf("Mobile initialized, please start phone now!\n");
return 0;
}
diff --git a/src/host/layer23/src/modem/app_modem.c
b/src/host/layer23/src/modem/app_modem.c
index 7551351..4529642 100644
--- a/src/host/layer23/src/modem/app_modem.c
+++ b/src/host/layer23/src/modem/app_modem.c
@@ -464,18 +464,22 @@
return 0;
}
+static int _modem_start(struct osmocom_ms *ms)
+{
+ l1ctl_tx_reset_req(ms, L1CTL_RES_T_FULL);
+ return 0;
+}
int l23_app_init(struct osmocom_ms *ms)
{
+ l23_app_start = _modem_start;
+
log_set_category_filter(osmo_stderr_target, DLGLOBAL, 1, LOGL_DEBUG);
log_set_category_filter(osmo_stderr_target, DLCSN1, 1, LOGL_DEBUG);
log_set_category_filter(osmo_stderr_target, DRR, 1, LOGL_INFO);
osmo_signal_register_handler(SS_L1CTL, &signal_cb, NULL);
- l1ctl_tx_reset_req(ms, L1CTL_RES_T_FULL);
-
lapdm_channel_set_l3(&ms->lapdm_channel, &modem_rslms_cb, ms);
-
return 0;
}
--
To view, visit
https://gerrit.osmocom.org/c/osmocom-bb/+/30943
To unsubscribe, or for help writing mail filters, visit
https://gerrit.osmocom.org/settings
Gerrit-Project: osmocom-bb
Gerrit-Branch: master
Gerrit-Change-Id: I1d232809764962f82fee86159bc61cdbc3eb3c48
Gerrit-Change-Number: 30943
Gerrit-PatchSet: 5
Gerrit-Owner: pespin <pespin(a)sysmocom.de>
Gerrit-Reviewer: Jenkins Builder
Gerrit-Reviewer: daniel <dwillmann(a)sysmocom.de>
Gerrit-Reviewer: fixeria <vyanitskiy(a)sysmocom.de>
Gerrit-Reviewer: laforge <laforge(a)osmocom.org>
Gerrit-Reviewer: pespin <pespin(a)sysmocom.de>
Gerrit-CC: neels <nhofmeyr(a)sysmocom.de>
Gerrit-MessageType: merged