Commit Graph

3312 Commits

Author SHA1 Message Date
Vadim Yanitskiy 8d875f3c3d mobile: add MNCC handler selection to settings
Since the mobile application is potentially able to maintain
multiple MS instances, it's better to have a possibility to
choose an MNCC (Call Control) handler per each MS separately.

This change removes the command-line option '-m', which was used
for enabling the external MNCC.  Now it's possible configure the
MNCC handler for each MS via the VTY interface and settings.

The following MNCC-handlers are available:

  - internal - built-in MNCC-handler (default);
  - external - external MNCC-handler via UNIX-socket (e.g. LCR);
  - dummy - dummy handler without CC support.

Change-Id: I2df91c7a79ba5c39bc6ceae900ef649129dd0346
Related: OS#3400
2022-11-29 02:21:57 +07:00
Vadim Yanitskiy c46d0699cd mobile: timeout_rr_meas(): also print sub-slot for TCH/H
Change-Id: I208c159ba610450e1850e601daa2712eef8c23e1
Related: OS#5599
2022-11-29 02:21:57 +07:00
Vadim Yanitskiy fe6345e1c4 layer23: always check return value of rsl_tlv_parse()
Similar to rsl_dec_chan_nr(), this function may also fail, leaving
the given struct tlv_parsed uninitialized.

Change-Id: I13f2a97eeff78ca8ed7d0a2844e4fca430ec7768
Related: OS#5599
2022-11-29 02:21:57 +07:00
Vadim Yanitskiy c9e579cea1 layer23: always check return value of rsl_dec_chan_nr()
The rsl_dec_chan_nr() may fail to decode RSL channel number, so
variables ch_type/chan_ss/chan_ts would remain uninitialized.

Change-Id: I9ab18bdaf41a29fcd32a7060668ef9db07b8cf7e
Related: OS#5599
2022-11-29 02:15:39 +07:00
Vadim Yanitskiy b76743df71 mobile: add MNCC socket path to settings
Previously the MNCC socket path was generated automatically,
using concatenation of the '/tmp/ms_mncc_' prefix and MS name.
Let's allow the user to specify this manually, keeping the same
naming generation method for default value.

Change-Id: I643356ac579bc5e765f668265ec803b22a73739c
Related: OS#3400
2022-11-27 06:12:38 +07:00
Vadim Yanitskiy bdc5acdb13 layer23: l1ctl_tx_traffic_req(): cosmetic: drop dead code
Change-Id: I941899ab27282a495f965ae9a0f41076dceef953
Related: OS#5599
2022-11-27 06:12:38 +07:00
Vadim Yanitskiy b2815c64a6 trxcon: add a spec. reference for the trxcon_fsm
Change-Id: I184abe10f874d97f047a3720c776fdef08d880e6
2022-11-25 22:32:14 +07:00
Vadim Yanitskiy 887b141699 layer23: add 'src/modem/modem' to .gitignore
Change-Id: I37e536493ddfd3bff1674d5bc85f40a0bbd0f317
2022-11-25 22:26:20 +07:00
Vadim Yanitskiy 04b14c49f0 trxcon: trx_data_rx_cb(): support parsing 8-PSK modulated bursts
Change-Id: I78b1a79c329299ab65eb339e9447a47382983cd9
2022-11-25 14:34:55 +00:00
Vadim Yanitskiy 384a8dd3fe trxcon: trx_data_rx_cb(): check TRXD PDU version
Change-Id: If5687d7d87619c0da02cc81ab26d63e61484bc06
2022-11-25 14:34:55 +00:00
Vadim Yanitskiy 6703d5289b trxcon: trx_data_rx_cb(): print strerror(errno) if read() fails
Change-Id: I78658a706e5bfda446e3929e33abcdee3f08845b
2022-11-25 14:34:55 +00:00
Vadim Yanitskiy 0f9d483984 trxcon: trx_data_rx_cb(): properly parse timeslot number
Remove the range check because it makes no sense anymore.

Change-Id: I1010cf39f61b8845acce632c19c74df892fc5acb
2022-11-25 14:34:55 +00:00
Vadim Yanitskiy edc12b2a5c fixup: firmware/layer1: introduce experimental PDCH support
This regression was introduced with the experimental PDCH support
back in 2020.  In particular, I made a mistake in the l1s_nb_resp()
resetting rxnb.dl->link_id to 0x00 if MF_F_PTCCH is not set, which
is of course not set for non-PDCH channels.

Change-Id: I8593f9b001e669e7cd10cc42c05221a6037e8ae1
Fixes: 67c49ba664
Fixes: OS#5791, OS#5133
2022-11-25 19:04:41 +07:00
Vadim Yanitskiy 7f1b99bc3b fixup: trxcon: make burst pointer in trxcon_phyif_burst_ind const
The for-loop was moved above the initialization of bi and kept using
bi.burst_len, which is indeed uninitialized.  Move it back.

Change-Id: I93a627233beef9157d47b35cafc42c53203619a7
Fixes: 178b92a108
Fixes: CID#300007
2022-11-24 10:57:18 +07:00
Vadim Yanitskiy 178b92a108 trxcon: make burst pointer in trxcon_phyif_burst_ind const
The trx_data_rx_cb() needs to be modified because it's accessing and
modifying the receive buffer via the bi.burst pointer, which
becomes const after this patch.

Change-Id: I68773d247725a6dc2cbbc58b63c0fd19ffdb1a16
Related: OS#5599
2022-11-23 06:26:51 +07:00
Vadim Yanitskiy c568b9cebe trxcon: group Rx burst params into struct l1sched_burst_ind
Change-Id: I3363c38a43d2f54f846527b70cedac8fa57bcb27
Related: OS#5599
2022-11-23 06:26:48 +07:00
Vadim Yanitskiy bd492d830d trxcon: adjust coding style in l1sched_pull_burst()
Change-Id: I96a40fdbea5085999b9aeb98b418ae27132f6fda
Related: OS#5599
2022-11-22 23:22:21 +00:00
Vadim Yanitskiy b387df26c4 trxcon: rework l1sched_trigger(), split l1sched_pull_burst()
The key idea is to allow triggering the scheduler only for a specific
timeslot of a frame, while keeping the API for triggering all together.

Split off the main part from l1sched_trigger() to l1sched_pull_burst().
While at it, rename l1sched_trigger() to l1sched_pull_send_frame().

Change-Id: Ibb7f9d7de26733f21b0753a2c655a250286bf1f0
Related: OS#5599
2022-11-22 23:22:21 +00:00
Vadim Yanitskiy bb2b1d7657 trxcon: rx_sch_fn(): do not use sched->fn_counter_proc
Use the given Fn instead, no need to go that deep for it.  The
sched->fn_counter_proc is an internal field of the scheduler,
which is not necessarily holding a valid value when pulling
Uplink bursts synchronously via the Ready-to-Send PHYIF API.

Change-Id: I56027876b50e53b474c2f54ac216cd141142020e
Related: OS#5599
2022-11-22 23:22:21 +00:00
Pau Espin e9f24d734a host/layer23: Add modem app
This app will allow setting up a tun device to transmit/receive data
as a GPRS MS against a GSM network.

This is just the initial skeleton so that people can work on it further
in follow-up commits.

Related: OS#5503
Change-Id: I8a1121b3287da7d7330c30e3118affa8fd1da61b
2022-11-21 19:56:54 +01:00
Pau Espin dd03ea6a82 layer23/mobile: Add missing dependency cflags
The *_LIBS vars were already added, but the *_CFLAGS were missing.

Change-Id: If904589b33357395e10f078857979aaecf5dbf68
2022-11-21 18:16:09 +00:00
Vadim Yanitskiy 855d83fc2d trxcon: separate l1sched_clck_handle() from BURST.ind handling
Do not mix up Downlink burst handling with the clock delivery.  Add
a separate PHYIF API function and call it from the TRXC/TRXD PHYIF.

This way calling trxcon_phyif_handle_burst_ind() would not trigger
the internal timer-driven Uplink scheduler in libl1sched, letting
the underlaying PHYIF logic to pull Uplink bursts synchronously.

Change-Id: Ieeee25573d1142aec2fee28d884127f14573b681
Related: OS#5599
2022-11-20 07:24:25 +07:00
Vadim Yanitskiy 1a0ad45a5d trxcon: drop unneeded imports in trxcon_main.c
Change-Id: I2868f83f55a6cbf3efc59f35ab7666671d22cf93
2022-11-18 05:29:49 +07:00
Vadim Yanitskiy ff0b5ed75a trxcon: use 'trxcon_phyif_' prefix for the PHYIF API
Change-Id: Icd2fc41cb3f42a791bf619c5f7b8fa4154371ba4
Related: OS#5599
2022-11-18 05:23:36 +07:00
Vadim Yanitskiy 269fe14045 trxcon: move l1sched/phyif shim API to libtrxcon.la
Change-Id: I56701b471a6f1c30ffd107037c2b1aed65621b2c
Related: OS#5599
2022-11-18 05:16:34 +07:00
Vadim Yanitskiy 54a2ee5cef trxcon: reorganize the core logic into libtrxcon.la
This is needed for the integration with osmo-trx-ms.  It was decided
to run the scheduler within the transceiver process, so that we can
reduce scheduling latency.  The idea is to maintain trxcon as a sub-
module in osmo-trx.git and link osmo-trx-ms against the libtrxcon.

We cannot use hard-coded logging categoris in a library, so add new
API for setting them: trxcon_set_log_cfg().  Use DLGLOBAL by default.

Change-Id: Idf207947f620a7394e0a0e5bf2c37bcd8df64bbe
Related: OS#5599
2022-11-18 04:59:50 +07:00
Vadim Yanitskiy 394793b1c1 trxcon: abstract L1CTL codec from the l1ctl_server API
The L1CTL codec (implemented in l1ctl.c) is going to be part of the
upcoming libtrxcon, so let's uncouple it from the l1ctl_server API.

Change-Id: I8d80af240b0e57f76263907c552288d4184876c0
Related: OS#5599
2022-11-12 22:15:58 +07:00
Vadim Yanitskiy 724502d0f4 trxcon: use L1CTL_HEADROOM in l1ctl_alloc_msg()
The l1ctl_client_read_cb() is using L1CTL_HEADROOM, so let's avoid
inconsistency and use L1CTL_HEADROOM in the l1ctl_alloc_msg() too.

Change-Id: I248f8c662ae0836cba61fb708a5dc73c57131f4c
Related: OS#5599
2022-11-12 22:11:49 +07:00
Vadim Yanitskiy 7d1a2247fa trxcon: move trxcon_inst_{alloc,free}() to a separate file
Both functions are going to be part of the upcoming libtrxcon.

Change-Id: I98963a1da927581597f7a170239dfb8a87cba842
Related: OS#5599
2022-11-12 22:09:55 +07:00
Vadim Yanitskiy a7f399eb95 trxcon: move l1sched_logging_init() from l1sched.h to logging.h
Change-Id: I43e21ca8a14445548e1d359bb6f8a3e36cb65bfa
Related: OS#5599
2022-11-12 02:29:31 +07:00
Vadim Yanitskiy 13046f172d trxcon: cosmetic: s/trx_log_init()/trxcon_logging_init()/
Change-Id: I65ab1e6d3a3bea65aeb13ab286e33795ba57f1f3
Related: OS#5599
2022-11-11 18:26:32 +07:00
Vadim Yanitskiy c3916785d8 trxcon: cosmetic: rename trxcon.c to trxcon_main.c
Change-Id: Idc5f4217dd31b5bdcb364600f7b97d1f60e1ab6f
Related: OS#5599
2022-11-11 13:45:11 +07:00
Vadim Yanitskiy 4cf9004b96 trxcon: maintain full power scan state in the trxcon_fsm
Currently the trxcon_fsm is simply passing start and stop ARFCN values
(as received from the L1CTL peer) over the PHYIF, and expecting the
PHY to perform the measurements within the given range.  This approach
requires the PHY implementation to maintain some state internally.

Let's simplify the job of the PHY implementation(s) by maintaining the
power scan state in the trxcon_fsm and sending a PHYIF_CMDT_MEASURE
command for each ARFCN in the given start/stop boundaries separately.

Change-Id: Ic5f724a11e225b439ec10aed7697e3e03b7929e5
Related: OS#5599
2022-11-11 06:38:00 +00:00
Vadim Yanitskiy 9e1de2359e trxcon: configure.ac: call LT_INIT after setting CFLAGS
If $CFLAGS is empty prior to calling the LT_INIT, this macro will
set $CFLAGS to "-g -O2".  We don't want implicit flags out of
nowhere, so let's simply move the invocation of LT_INIT down below.

Change-Id: I8d8eb1e3428ffcb84ddd53230fada39328337d15
Related: OS#5749
2022-11-10 16:10:10 +00:00
Vadim Yanitskiy 9e9c1c6e29 trxcon: fixup: handle DATA.cnf/TRAFFIC.cnf via TRXCON_EV_TX_DATA_CNF
Found this problem while trying to build with "-flto":

  ../include/osmocom/bb/trxcon/l1ctl.h:21:5: error: type of
        'l1ctl_tx_dt_conf' does not match original declaration
  [-Werror=lto-type-mismatch]
     21 | int l1ctl_tx_dt_conf(struct l1ctl_client *l1c,
        |     ^
  l1ctl.c:288:5: note: type mismatch in parameter 2
    288 | int l1ctl_tx_dt_conf(struct l1ctl_client *l1c, bool traffic,
        |     ^

The trxcon_fsm is passing only two arguments to l1ctl_tx_dt_conf().
The 'traffic' flag is included in struct trxcon_param_tx_data_cnf,
so the 2rd argument is not needed and should have been removed.

Change-Id: Ifc538f940571172fa237ecb7000f3cfea3655edc
2022-11-10 16:10:10 +00:00
Vadim Yanitskiy 03ef0b4e9f trxcon: add handle_full_power_scan_req(), reduce code duplication
Allow TRXCON_ST_{FULL_POWER_SCAN->FULL_POWER_SCAN} state transition
so that we can call osmo_fsm_inst_state_chg() unconditionally.

Change-Id: I1ea69561a2d3cf73009c6244b1d0f090d744d7b2
Related: OS#5599
2022-11-08 04:34:34 +07:00
Vadim Yanitskiy 6fc090593d trxcon: move the trxcon_fsm related stuff into its own header
Change-Id: I32097b27f8de8d2b765a4399ad5fd3a1bdba85f4
Related: OS#5599
2022-11-08 04:34:28 +07:00
Vadim Yanitskiy 2b9935064b trxcon: add missing imports to trxcon.h
Change-Id: I0fa507e80a638ca7ed2ff421303e9722b33e20ea
Related: OS#5599
2022-11-08 04:33:26 +07:00
Vadim Yanitskiy 05be562b70 trxcon: abstract out trx_if.c from struct trxcon_inst
The PHYIF implementation shall not have direct access to the struct
trxcon_inst it belongs to.  All communication shall be done via the
abstract PHYIF interface (see <include/osmocom/bb/trxcon/phyif.h>).

* Introduce struct trx_if_params containing all necessary params.
* Make trx_if_open() accept a struct trx_if_params pointer.

Change-Id: I1a97c4c783ab671636ca33700eca97dede2a4a09
Related: OS#5599
2022-11-07 21:02:02 +00:00
Vadim Yanitskiy 5fbc7e50a9 trxcon: deliver measurement results via the PHYIF primitives
The PHYIF implementation shall not send events to the trxcon_fsm
directly.  The measurement command is sent in form of an abstract
PHYIF primitive (PHYIF_CMDT_MEASURE), so it's more logical that
the response is sent in form of a PHYIF primitive too.

Change-Id: Ie20616c288c16559d0a566979b24d57b50369fab
Related: OS#5599
2022-11-07 21:02:02 +00:00
Vadim Yanitskiy 6d2ea361e6 trxcon: trxcon_fsm.c: remove unused import of l1ctl_server.h
Change-Id: I81a877845160db3b9d6823091ac9243be0836729
2022-11-07 21:02:02 +00:00
Vadim Yanitskiy 1378b0d86f trxcon: l1ctl.h: remove unneeded import of l1ctl_proto.h
Change-Id: Ie66bb553cffd72a59d949979d8f97bacfc0bdad0
2022-11-07 21:02:02 +00:00
Vadim Yanitskiy 9ae0fb9339 trxcon: handle RACH.cnf via TRXCON_EV_TX_ACCESS_BURST_CNF
Change-Id: I64de7d4e8137041b373a9920296553fbfe8386d4
Related: OS#5599
2022-11-07 21:02:02 +00:00
Vadim Yanitskiy ecfff248ee trxcon: l1sched_handle_data_cnf(): make the cnf struct scoped
Change-Id: I526116c2a20970aee7881e19e283e083bc6b1911
Related: OS#5599
2022-11-07 21:02:02 +00:00
Vadim Yanitskiy 12ef3e4fc7 trxcon: handle DATA.cnf/TRAFFIC.cnf via TRXCON_EV_TX_DATA_CNF
We already handle DATA.req/TRAFFIC.req via TRXCON_EV_TX_DATA_REQ,
so let's handle the respective *.cnf messages via the FSM too.

Change-Id: Ica7a25f0bf8c7f89037a776d711ac641c57c9ad5
Related: OS#5599
2022-11-07 21:02:02 +00:00
Vadim Yanitskiy c65190bfac trxcon: merge TRXCON_EV_TX_TRAFFIC_* with TRXCON_EV_TX_DATA_*
It's not really necessary to handle signalling and traffic via
different events, so let's reduce complexity by merging them.

Change-Id: I8c2b3274f32d4d52424512d988b93d6233dd09a0
Related: OS#5599
2022-11-07 21:02:02 +00:00
Vadim Yanitskiy 01e0329243 trxcon: compose struct l1ctl_info_dl in l1ctl_tx_dt_ind()
The trxcon_fsm should not be dealing with the L1CTL protocol, so
let's better hand over the trxcon_param_rx_traffic_data_ind to
l1ctl_tx_dt_ind() and compose the l1ctl_info_dl there.

Change-Id: Ie57d86ffd9ea7c44187aafba0df1f519d1c523fb
Related: OS#5599
2022-11-07 21:02:02 +00:00
Vadim Yanitskiy 6df5177127 osmocon: add -Werror={implicit-int,int-conversion,old-style-definition}
Change-Id: I46bdc87ef07704369bdc3ccc03b384aac87fe2f7
2022-11-05 19:25:07 +07:00
Vadim Yanitskiy 136cf481c7 layer23: fix -Werror=old-style-definition problems
Change-Id: I0187acb02de6fd22ccc86c112640caa8aa3fa2bc
2022-11-05 19:18:42 +07:00
Vadim Yanitskiy 6ba147556b layer23: add -Werror={implicit-int,int-conversion,old-style-definition}
Change-Id: Ia6e0c717c782ea000f1d40ad11af2ee725f9c309
2022-11-05 19:10:55 +07:00