From 1953a21515ed14daa5c797e21d08048aaa91bb7a Mon Sep 17 00:00:00 2001 From: Pau Espin Pedrol Date: Thu, 12 Jan 2023 17:17:19 +0100 Subject: [PATCH] layer23: Move osmocom_ms to a separate file This way we can extend its API and contents more easily, and keep most of it together in one place. Change-Id: Icb4891cc1e4a0ecb5f09cb8a84b0ebe1b91a46b8 --- .../include/osmocom/bb/common/Makefile.am | 1 + .../layer23/include/osmocom/bb/common/ms.h | 102 +++++++++++++++++ .../include/osmocom/bb/common/osmocom_data.h | 104 +----------------- src/host/layer23/src/common/Makefile.am | 1 + src/host/layer23/src/common/l1ctl.c | 1 + src/host/layer23/src/common/l1l2_interface.c | 1 + src/host/layer23/src/common/main.c | 18 +-- src/host/layer23/src/common/ms.c | 40 +++++++ src/host/layer23/src/common/sap_fsm.c | 1 + src/host/layer23/src/common/sap_interface.c | 2 +- src/host/layer23/src/common/sim.c | 1 + src/host/layer23/src/misc/app_cbch_sniff.c | 1 + src/host/layer23/src/misc/app_ccch_scan.c | 1 + src/host/layer23/src/misc/cell_log.c | 1 + src/host/layer23/src/misc/rslms.c | 1 + src/host/layer23/src/mobile/app_mobile.c | 1 + src/host/layer23/src/mobile/gapk_io.c | 1 + src/host/layer23/src/mobile/gsm322.c | 1 + src/host/layer23/src/mobile/gsm411_sms.c | 1 + src/host/layer23/src/mobile/gsm414.c | 1 + src/host/layer23/src/mobile/gsm480_ss.c | 1 + src/host/layer23/src/mobile/gsm48_cc.c | 1 + src/host/layer23/src/mobile/gsm48_mm.c | 1 + src/host/layer23/src/mobile/gsm48_rr.c | 1 + src/host/layer23/src/mobile/mnccms.c | 1 + src/host/layer23/src/mobile/script_lua.c | 1 + src/host/layer23/src/mobile/settings.c | 1 + src/host/layer23/src/mobile/subscriber.c | 1 + src/host/layer23/src/mobile/support.c | 1 + src/host/layer23/src/mobile/transaction.c | 1 + src/host/layer23/src/mobile/voice.c | 1 + src/host/layer23/src/mobile/vty_interface.c | 1 + src/host/layer23/src/modem/app_modem.c | 1 + 33 files changed, 176 insertions(+), 118 deletions(-) create mode 100644 src/host/layer23/include/osmocom/bb/common/ms.h create mode 100644 src/host/layer23/src/common/ms.c diff --git a/src/host/layer23/include/osmocom/bb/common/Makefile.am b/src/host/layer23/include/osmocom/bb/common/Makefile.am index 31bb6b64f..8663d9cd6 100644 --- a/src/host/layer23/include/osmocom/bb/common/Makefile.am +++ b/src/host/layer23/include/osmocom/bb/common/Makefile.am @@ -3,6 +3,7 @@ noinst_HEADERS = \ l1l2_interface.h \ l23_app.h \ logging.h \ + ms.h \ networks.h \ gps.h \ sysinfo.h \ diff --git a/src/host/layer23/include/osmocom/bb/common/ms.h b/src/host/layer23/include/osmocom/bb/common/ms.h new file mode 100644 index 000000000..b9c9276ad --- /dev/null +++ b/src/host/layer23/include/osmocom/bb/common/ms.h @@ -0,0 +1,102 @@ +/* Mobile Station */ +#pragma once + +#include +#include +#include + +/* FIXME no 'mobile' specific stuff should be here */ +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + + +struct osmosap_entity { + struct osmo_fsm_inst *fi; + uint16_t max_msg_size; + + /* Current state of remote SIM card */ + enum sap_card_status_type card_status; + + /* Optional SAP message call-back */ + sap_msg_cb_t sap_msg_cb; + /* Optional response call-back */ + sap_rsp_cb_t sap_rsp_cb; +}; + +struct osmol1_entity { + int (*l1_traffic_ind)(struct osmocom_ms *ms, struct msgb *msg); +}; + +struct osmomncc_entity { + int (*mncc_recv)(struct osmocom_ms *ms, int msg_type, void *arg); + struct mncc_sock_state *sock_state; + uint32_t ref; +}; + +/* RX measurement statistics */ +struct rx_meas_stat { + uint32_t last_fn; + + /* cumulated values of current cell from SACCH dl */ + uint32_t frames; + uint32_t snr; + uint32_t berr; + uint32_t rxlev; + + /* counters loss criterion */ + int16_t dsc, ds_fail; + int16_t s, rl_fail; +}; + +enum { + MS_SHUTDOWN_NONE = 0, + MS_SHUTDOWN_IMSI_DETACH = 1, + MS_SHUTDOWN_WAIT_RESET = 2, + MS_SHUTDOWN_COMPL = 3, +}; + +struct osmocom_ms { + struct llist_head entity; + char *name; + struct osmo_wqueue l2_wq, sap_wq; + uint16_t test_arfcn; + struct osmol1_entity l1_entity; + + bool started, deleting; + uint8_t shutdown; + struct gsm_support support; + struct gsm_settings settings; + struct gsm_subscriber subscr; + struct gsm_sim sim; + struct lapdm_channel lapdm_channel; + struct osmosap_entity sap_entity; + struct rx_meas_stat meas; + struct gsm48_rrlayer rrlayer; + struct gsm322_plmn plmn; + struct gsm322_cellsel cellsel; + struct gsm48_mmlayer mmlayer; + struct gsm48_cclayer cclayer; + struct osmomncc_entity mncc_entity; + struct llist_head trans_list; + + /* Audio I/O */ + struct gapk_io_state *gapk_io; + + void *lua_state; + int lua_cb_ref; + char *lua_script; +}; + +struct osmocom_ms *osmocom_ms_alloc(void *ctx); diff --git a/src/host/layer23/include/osmocom/bb/common/osmocom_data.h b/src/host/layer23/include/osmocom/bb/common/osmocom_data.h index a8af1e85a..d78edc3e0 100644 --- a/src/host/layer23/include/osmocom/bb/common/osmocom_data.h +++ b/src/host/layer23/include/osmocom/bb/common/osmocom_data.h @@ -1,108 +1,10 @@ -#ifndef osmocom_data_h -#define osmocom_data_h +#pragma once -#include -#include -#include +#include struct osmocom_ms; struct gapk_io_state; - /* FIXME no 'mobile' specific stuff should be here */ -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -struct osmosap_entity { - struct osmo_fsm_inst *fi; - uint16_t max_msg_size; - - /* Current state of remote SIM card */ - enum sap_card_status_type card_status; - - /* Optional SAP message call-back */ - sap_msg_cb_t sap_msg_cb; - /* Optional response call-back */ - sap_rsp_cb_t sap_rsp_cb; -}; - -struct osmol1_entity { - int (*l1_traffic_ind)(struct osmocom_ms *ms, struct msgb *msg); -}; - -struct osmomncc_entity { - int (*mncc_recv)(struct osmocom_ms *ms, int msg_type, void *arg); - struct mncc_sock_state *sock_state; - uint32_t ref; -}; - - -/* RX measurement statistics */ -struct rx_meas_stat { - uint32_t last_fn; - - /* cumulated values of current cell from SACCH dl */ - uint32_t frames; - uint32_t snr; - uint32_t berr; - uint32_t rxlev; - - /* counters loss criterion */ - int16_t dsc, ds_fail; - int16_t s, rl_fail; -}; - -enum { - MS_SHUTDOWN_NONE = 0, - MS_SHUTDOWN_IMSI_DETACH = 1, - MS_SHUTDOWN_WAIT_RESET = 2, - MS_SHUTDOWN_COMPL = 3, -}; - -/* One Mobilestation for osmocom */ -struct osmocom_ms { - struct llist_head entity; - char *name; - struct osmo_wqueue l2_wq, sap_wq; - uint16_t test_arfcn; - struct osmol1_entity l1_entity; - - bool started, deleting; - uint8_t shutdown; - struct gsm_support support; - struct gsm_settings settings; - struct gsm_subscriber subscr; - struct gsm_sim sim; - struct lapdm_channel lapdm_channel; - struct osmosap_entity sap_entity; - struct rx_meas_stat meas; - struct gsm48_rrlayer rrlayer; - struct gsm322_plmn plmn; - struct gsm322_cellsel cellsel; - struct gsm48_mmlayer mmlayer; - struct gsm48_cclayer cclayer; - struct osmomncc_entity mncc_entity; - struct llist_head trans_list; - - /* Audio I/O */ - struct gapk_io_state *gapk_io; - - void *lua_state; - int lua_cb_ref; - char *lua_script; -}; - enum osmobb_sig_subsys { SS_L1CTL, SS_GLOBAL, @@ -153,5 +55,3 @@ struct osmobb_neigh_pm_ind { uint16_t band_arfcn; uint8_t rx_lev; }; - -#endif diff --git a/src/host/layer23/src/common/Makefile.am b/src/host/layer23/src/common/Makefile.am index 185bf044e..f6578ece7 100644 --- a/src/host/layer23/src/common/Makefile.am +++ b/src/host/layer23/src/common/Makefile.am @@ -18,6 +18,7 @@ liblayer23_a_SOURCES = \ l1l2_interface.c \ l1ctl_lapdm_glue.c \ logging.c \ + ms.c \ networks.c \ sap_fsm.c \ sap_proto.c \ diff --git a/src/host/layer23/src/common/l1ctl.c b/src/host/layer23/src/common/l1ctl.c index 94079c741..2695e534b 100644 --- a/src/host/layer23/src/common/l1ctl.c +++ b/src/host/layer23/src/common/l1ctl.c @@ -40,6 +40,7 @@ #include #include +#include #include #include #include diff --git a/src/host/layer23/src/common/l1l2_interface.c b/src/host/layer23/src/common/l1l2_interface.c index 9db285f79..94303c29b 100644 --- a/src/host/layer23/src/common/l1l2_interface.c +++ b/src/host/layer23/src/common/l1l2_interface.c @@ -18,6 +18,7 @@ */ #include +#include #include #include #include diff --git a/src/host/layer23/src/common/main.c b/src/host/layer23/src/common/main.c index ae4932a57..61a8604ad 100644 --- a/src/host/layer23/src/common/main.c +++ b/src/host/layer23/src/common/main.c @@ -18,6 +18,7 @@ */ #include +#include #include #include #include @@ -265,25 +266,12 @@ int main(int argc, char **argv) log_set_print_filename2(osmo_stderr_target, LOG_FILENAME_BASENAME); log_set_print_filename_pos(osmo_stderr_target, LOG_FILENAME_POS_HEADER_END); - ms = talloc_zero(l23_ctx, struct osmocom_ms); - if (!ms) { - fprintf(stderr, "Failed to allocate MS\n"); - exit(1); - } - print_copyright(); + ms = osmocom_ms_alloc(l23_ctx); + OSMO_ASSERT(ms); llist_add_tail(&ms->entity, &ms_list); - ms->name = talloc_strdup(ms, "1"); - ms->test_arfcn = 871; - ms->lapdm_channel.lapdm_dcch.l1_ctx = ms; - ms->lapdm_channel.lapdm_dcch.l3_ctx = ms; - ms->lapdm_channel.lapdm_acch.l1_ctx = ms; - ms->lapdm_channel.lapdm_acch.l3_ctx = ms; - lapdm_channel_init(&ms->lapdm_channel, LAPDM_MODE_MS); - lapdm_channel_set_l1(&ms->lapdm_channel, l1ctl_ph_prim_cb, ms); - rc = l23_app_init(ms); if (rc < 0) { fprintf(stderr, "Failed during l23_app_init()\n"); diff --git a/src/host/layer23/src/common/ms.c b/src/host/layer23/src/common/ms.c new file mode 100644 index 000000000..0b1ccb850 --- /dev/null +++ b/src/host/layer23/src/common/ms.c @@ -0,0 +1,40 @@ +/* Mobile Station */ +/* (C) 2010 by Holger Hans Peter Freyther + * (C) 2010 by Harald Welte + * (C) 2023 by sysmocom - s.m.f.c. GmbH + * + * All Rights Reserved + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + */ + +#include + +struct osmocom_ms *osmocom_ms_alloc(void *ctx) +{ + struct osmocom_ms *ms; + + ms = talloc_zero(ctx, struct osmocom_ms); + if (!ms) + return NULL; + + ms->name = talloc_strdup(ms, "1"); + ms->test_arfcn = 871; + ms->lapdm_channel.lapdm_dcch.l1_ctx = ms; + ms->lapdm_channel.lapdm_dcch.l3_ctx = ms; + ms->lapdm_channel.lapdm_acch.l1_ctx = ms; + ms->lapdm_channel.lapdm_acch.l3_ctx = ms; + lapdm_channel_init(&ms->lapdm_channel, LAPDM_MODE_MS); + lapdm_channel_set_l1(&ms->lapdm_channel, l1ctl_ph_prim_cb, ms); + + return ms; +} diff --git a/src/host/layer23/src/common/sap_fsm.c b/src/host/layer23/src/common/sap_fsm.c index ce0a22d3f..f189bc8a1 100644 --- a/src/host/layer23/src/common/sap_fsm.c +++ b/src/host/layer23/src/common/sap_fsm.c @@ -30,6 +30,7 @@ #include #include +#include #include #include diff --git a/src/host/layer23/src/common/sap_interface.c b/src/host/layer23/src/common/sap_interface.c index c4f14535e..86c70a964 100644 --- a/src/host/layer23/src/common/sap_interface.c +++ b/src/host/layer23/src/common/sap_interface.c @@ -34,7 +34,7 @@ #include #include - +#include #include #include #include diff --git a/src/host/layer23/src/common/sim.c b/src/host/layer23/src/common/sim.c index 8e0d7993b..bd50f6273 100644 --- a/src/host/layer23/src/common/sim.c +++ b/src/host/layer23/src/common/sim.c @@ -25,6 +25,7 @@ #include #include +#include #include extern struct gsmtap_inst *gsmtap_inst; diff --git a/src/host/layer23/src/misc/app_cbch_sniff.c b/src/host/layer23/src/misc/app_cbch_sniff.c index 24caae913..d04faa933 100644 --- a/src/host/layer23/src/misc/app_cbch_sniff.c +++ b/src/host/layer23/src/misc/app_cbch_sniff.c @@ -19,6 +19,7 @@ */ #include +#include #include #include #include diff --git a/src/host/layer23/src/misc/app_ccch_scan.c b/src/host/layer23/src/misc/app_ccch_scan.c index cfb439223..da8223cf0 100644 --- a/src/host/layer23/src/misc/app_ccch_scan.c +++ b/src/host/layer23/src/misc/app_ccch_scan.c @@ -32,6 +32,7 @@ #include #include #include +#include #include #include diff --git a/src/host/layer23/src/misc/cell_log.c b/src/host/layer23/src/misc/cell_log.c index ab8678da4..7635f1f29 100644 --- a/src/host/layer23/src/misc/cell_log.c +++ b/src/host/layer23/src/misc/cell_log.c @@ -37,6 +37,7 @@ #include #include +#include #include #include #include diff --git a/src/host/layer23/src/misc/rslms.c b/src/host/layer23/src/misc/rslms.c index afb27270f..c071113b0 100644 --- a/src/host/layer23/src/misc/rslms.c +++ b/src/host/layer23/src/misc/rslms.c @@ -30,6 +30,7 @@ #include #include #include +#include #include /* Send a 'simple' RLL request to L2 */ diff --git a/src/host/layer23/src/mobile/app_mobile.c b/src/host/layer23/src/mobile/app_mobile.c index 5ea31c085..5bf765a73 100644 --- a/src/host/layer23/src/mobile/app_mobile.c +++ b/src/host/layer23/src/mobile/app_mobile.c @@ -22,6 +22,7 @@ #include #include +#include #include #include #include diff --git a/src/host/layer23/src/mobile/gapk_io.c b/src/host/layer23/src/mobile/gapk_io.c index 0a807ff33..a2a4e849b 100644 --- a/src/host/layer23/src/mobile/gapk_io.c +++ b/src/host/layer23/src/mobile/gapk_io.c @@ -33,6 +33,7 @@ #include #include +#include #include #include diff --git a/src/host/layer23/src/mobile/gsm322.c b/src/host/layer23/src/mobile/gsm322.c index b94fbafdb..4b735947f 100644 --- a/src/host/layer23/src/mobile/gsm322.c +++ b/src/host/layer23/src/mobile/gsm322.c @@ -32,6 +32,7 @@ #include #include #include +#include #include #include #include diff --git a/src/host/layer23/src/mobile/gsm411_sms.c b/src/host/layer23/src/mobile/gsm411_sms.c index 76355c0df..d00e94d2f 100644 --- a/src/host/layer23/src/mobile/gsm411_sms.c +++ b/src/host/layer23/src/mobile/gsm411_sms.c @@ -30,6 +30,7 @@ #include #include #include +#include #include #include #include diff --git a/src/host/layer23/src/mobile/gsm414.c b/src/host/layer23/src/mobile/gsm414.c index e4a4edd56..ced15ed59 100644 --- a/src/host/layer23/src/mobile/gsm414.c +++ b/src/host/layer23/src/mobile/gsm414.c @@ -33,6 +33,7 @@ #include #include +#include #include #include diff --git a/src/host/layer23/src/mobile/gsm480_ss.c b/src/host/layer23/src/mobile/gsm480_ss.c index b0a3dc97f..139b45b79 100644 --- a/src/host/layer23/src/mobile/gsm480_ss.c +++ b/src/host/layer23/src/mobile/gsm480_ss.c @@ -24,6 +24,7 @@ #include #include #include +#include #include #include #include diff --git a/src/host/layer23/src/mobile/gsm48_cc.c b/src/host/layer23/src/mobile/gsm48_cc.c index 1be53ba46..4db192554 100644 --- a/src/host/layer23/src/mobile/gsm48_cc.c +++ b/src/host/layer23/src/mobile/gsm48_cc.c @@ -28,6 +28,7 @@ #include #include +#include #include #include #include diff --git a/src/host/layer23/src/mobile/gsm48_mm.c b/src/host/layer23/src/mobile/gsm48_mm.c index 8e3c9765b..500eff6de 100644 --- a/src/host/layer23/src/mobile/gsm48_mm.c +++ b/src/host/layer23/src/mobile/gsm48_mm.c @@ -30,6 +30,7 @@ #include #include +#include #include #include #include diff --git a/src/host/layer23/src/mobile/gsm48_rr.c b/src/host/layer23/src/mobile/gsm48_rr.c index 44d74404a..87a0dcd6e 100644 --- a/src/host/layer23/src/mobile/gsm48_rr.c +++ b/src/host/layer23/src/mobile/gsm48_rr.c @@ -69,6 +69,7 @@ #include #include +#include #include #include #include diff --git a/src/host/layer23/src/mobile/mnccms.c b/src/host/layer23/src/mobile/mnccms.c index 5d4502ab7..16cabc149 100644 --- a/src/host/layer23/src/mobile/mnccms.c +++ b/src/host/layer23/src/mobile/mnccms.c @@ -25,6 +25,7 @@ #include #include +#include #include #include #include diff --git a/src/host/layer23/src/mobile/script_lua.c b/src/host/layer23/src/mobile/script_lua.c index f8f2bf39d..eb3f0085d 100644 --- a/src/host/layer23/src/mobile/script_lua.c +++ b/src/host/layer23/src/mobile/script_lua.c @@ -19,6 +19,7 @@ #include #include +#include #include #include diff --git a/src/host/layer23/src/mobile/settings.c b/src/host/layer23/src/mobile/settings.c index 846cda207..b6e251bb5 100644 --- a/src/host/layer23/src/mobile/settings.c +++ b/src/host/layer23/src/mobile/settings.c @@ -25,6 +25,7 @@ #include #include #include +#include #include static char *layer2_socket_path = "/tmp/osmocom_l2"; diff --git a/src/host/layer23/src/mobile/subscriber.c b/src/host/layer23/src/mobile/subscriber.c index a22688933..164622a25 100644 --- a/src/host/layer23/src/mobile/subscriber.c +++ b/src/host/layer23/src/mobile/subscriber.c @@ -24,6 +24,7 @@ #include #include +#include #include #include #include diff --git a/src/host/layer23/src/mobile/support.c b/src/host/layer23/src/mobile/support.c index fd1ed7437..e82d49f5d 100644 --- a/src/host/layer23/src/mobile/support.c +++ b/src/host/layer23/src/mobile/support.c @@ -20,6 +20,7 @@ #include #include +#include void gsm_support_init(struct osmocom_ms *ms) { diff --git a/src/host/layer23/src/mobile/transaction.c b/src/host/layer23/src/mobile/transaction.c index fd5a12d06..2fb910af0 100644 --- a/src/host/layer23/src/mobile/transaction.c +++ b/src/host/layer23/src/mobile/transaction.c @@ -22,6 +22,7 @@ #include #include +#include #include #include #include diff --git a/src/host/layer23/src/mobile/voice.c b/src/host/layer23/src/mobile/voice.c index 0840ea506..7d6c2e02a 100644 --- a/src/host/layer23/src/mobile/voice.c +++ b/src/host/layer23/src/mobile/voice.c @@ -27,6 +27,7 @@ #include #include +#include #include #include #include diff --git a/src/host/layer23/src/mobile/vty_interface.c b/src/host/layer23/src/mobile/vty_interface.c index 16eedf24a..ff881048a 100644 --- a/src/host/layer23/src/mobile/vty_interface.c +++ b/src/host/layer23/src/mobile/vty_interface.c @@ -28,6 +28,7 @@ #include #include +#include #include #include #include diff --git a/src/host/layer23/src/modem/app_modem.c b/src/host/layer23/src/modem/app_modem.c index 1852a0dbb..61266f514 100644 --- a/src/host/layer23/src/modem/app_modem.c +++ b/src/host/layer23/src/modem/app_modem.c @@ -36,6 +36,7 @@ #include #include +#include #include #include #include