Skip to content

Loading builds...

Changes

#21922 (May 5, 2026, 6:43:50 AM)

nokia cosmetic: add bts_is_insite() function

Nokia InSite gets a different config than the larger Nokia BTS models,
and make_bts_config() function checks the BTS type to decide which
config to send.  Change the BTS type check from a long 'if' line that
compares against 3 different InSite BTS type codes to bts_is_insite()
helper function that encapsulates a switch statement.

Upcoming code additions will need to check for Flexi Multiradio BTS
family in a similar manner - so be consistent.

Change-Id: I44bbcd79d9741f1df280b6b2391f04f754598035
falcon at

#21921 (May 5, 2026, 6:43:50 AM)

nokia cosmetic: factor out BTS_CONF_COMPL handling

When the BTS accepts the config sent to it via BTS_CONF_DATA, it
responds with BTS_CONF_COMPL.  Upon receiving the latter message,
we have to send TRX unlock and TRX reset commands, and we have to
start LAPD for RSL.  Factor out this logic into a helper function,
to reduce the level of indentation and make it easier to extend.

Change-Id: I26e9b25ba4e68e945f7dd8a632009cc3683a322c
falcon at

#21920 (May 5, 2026, 6:43:49 AM)

Nokia Flexi Multiradio: reset non-BCCH TRX

In the case of MetroSite and UltraSite BTS, it has been determined
empirically that TRX reset needs to be skipped for non-BCCH TRX.
However, the opposite situation holds on Flexi MR: non-BCCH TRX
do need to be reset, or they fail to come up.  Solution:
conditionalize reset of non-BCCH TRX on Nokia BTS type.

Change-Id: I270c1ffab074c1e5a43ab9dfa103725a1518f718
falcon at

#21919 (May 5, 2026, 6:43:48 AM)

nokia cosmetic: add bts_is_insite() function

Nokia InSite gets a different config than the larger Nokia BTS models,
and make_bts_config() function checks the BTS type to decide which
config to send.  Change the BTS type check from a long 'if' line that
compares against 3 different InSite BTS type codes to bts_is_insite()
helper function that encapsulates a switch statement.

Upcoming code additions will need to check for Flexi Multiradio BTS
family in a similar manner - so be consistent.

Change-Id: I44bbcd79d9741f1df280b6b2391f04f754598035
falcon at

#21918 (May 5, 2026, 6:43:48 AM)

nokia cosmetic: factor out BTS_CONF_COMPL handling

When the BTS accepts the config sent to it via BTS_CONF_DATA, it
responds with BTS_CONF_COMPL.  Upon receiving the latter message,
we have to send TRX unlock and TRX reset commands, and we have to
start LAPD for RSL.  Factor out this logic into a helper function,
to reduce the level of indentation and make it easier to extend.

Change-Id: I26e9b25ba4e68e945f7dd8a632009cc3683a322c
falcon at

#21917 (May 5, 2026, 6:43:47 AM)

Nokia Flexi Multiradio: reset non-BCCH TRX

In the case of MetroSite and UltraSite BTS, it has been determined
empirically that TRX reset needs to be skipped for non-BCCH TRX.
However, the opposite situation holds on Flexi MR: non-BCCH TRX
do need to be reset, or they fail to come up.  Solution:
conditionalize reset of non-BCCH TRX on Nokia BTS type.

Change-Id: I270c1ffab074c1e5a43ab9dfa103725a1518f718
falcon at

#21916 (May 4, 2026, 12:46:50 PM)

trx: add JSON stats export for WebSDR API

Introduce stats_json.c providing JSON serialization for:
- stats and counters
- rate counters
- BTS state
- TRX/transceiver state
- WebSDR runtime metrics

Add osmobts_get_stats() API to expose these via WebSDR
interface and export it in Emscripten build

This enables programmatic access to data previously available
via VTY (e.g. "show stats", "show bts")

Change-Id: Ifb82adfab879a65ecd222c45e06551983aa90a0f
dtv.comp at

#21915 (May 4, 2026, 12:46:33 PM)

trx, bts: add optional WebSDR backend (callback-based transport)

Introduce WebSDR backend enabled via ENABLE_WEBSDR,
adding an alternative callback-based transport alongside
existing socket-based TRX/OSMUX I/O

Implement:
- TRX control via osmotrxlib_process_command()
- TRXD data via apitrx_tx_call()/trx_data_read()
- clock handling via apibts_clock_ind() and external timers
- Osmux integration via ws_osmux_* helpers

Adapt scheduler to support API-based burst submission and
external timer callbacks in WebSDR mode

Disable signal handling, stats and socket I/O when building
with ENABLE_WEBSDR

Add WebSDR API entrypoint, Emscripten build target and
example configuration

Enables running BTS/TRX stack in WebAssembly environments

Change-Id: Idebd588f33afd85021813ad5821391781db683a9
dtv.comp at

#21914 (May 4, 2026, 12:46:20 PM)

trx: add JSON stats export for WebSDR API

Introduce stats_json.c providing JSON serialization for:
- stats and counters
- rate counters
- BTS state
- TRX/transceiver state
- WebSDR runtime metrics

Add osmobts_get_stats() API to expose these via WebSDR
interface and export it in Emscripten build

This enables programmatic access to data previously available
via VTY (e.g. "show stats", "show bts")

Change-Id: Ifb82adfab879a65ecd222c45e06551983aa90a0f
dtv.comp at

#21913 (May 4, 2026, 12:46:09 PM)

trx, bts: add optional WebSDR backend (callback-based transport)

Introduce WebSDR backend enabled via ENABLE_WEBSDR,
adding an alternative callback-based transport alongside
existing socket-based TRX/OSMUX I/O

Implement:
- TRX control via osmotrxlib_process_command()
- TRXD data via apitrx_tx_call()/trx_data_read()
- clock handling via apibts_clock_ind() and external timers
- Osmux integration via ws_osmux_* helpers

Adapt scheduler to support API-based burst submission and
external timer callbacks in WebSDR mode

Disable signal handling, stats and socket I/O when building
with ENABLE_WEBSDR

Add WebSDR API entrypoint, Emscripten build target and
example configuration

Enables running BTS/TRX stack in WebAssembly environments

Change-Id: Idebd588f33afd85021813ad5821391781db683a9
dtv.comp at

#21912 (May 4, 2026, 12:34:08 PM)

trx: add JSON stats export for WebSDR API

Introduce stats_json.c providing JSON serialization for:
- stats and counters
- rate counters
- BTS state
- TRX/transceiver state
- WebSDR runtime metrics

Add osmobts_get_stats() API to expose these via WebSDR
interface and export it in Emscripten build

This enables programmatic access to data previously available
via VTY (e.g. "show stats", "show bts")

Change-Id: Ifb82adfab879a65ecd222c45e06551983aa90a0f
dtv.comp at

#21911 (May 4, 2026, 12:34:08 PM)

trx, bts: add optional WebSDR backend (callback-based transport)

Introduce WebSDR backend enabled via ENABLE_WEBSDR,
adding an alternative callback-based transport alongside
existing socket-based TRX/OSMUX I/O

Implement:
- TRX control via osmotrxlib_process_command()
- TRXD data via apitrx_tx_call()/trx_data_read()
- clock handling via apibts_clock_ind() and external timers
- Osmux integration via ws_osmux_* helpers

Adapt scheduler to support API-based burst submission and
external timer callbacks in WebSDR mode

Disable signal handling, stats and socket I/O when building
with ENABLE_WEBSDR

Add WebSDR API entrypoint, Emscripten build target and
example configuration

Enables running BTS/TRX stack in WebAssembly environments

Change-Id: Idebd588f33afd85021813ad5821391781db683a9
dtv.comp at

#21910 (May 4, 2026, 12:34:04 PM)

trx: add JSON stats export for WebSDR API

Introduce stats_json.c providing JSON serialization for:
- stats and counters
- rate counters
- BTS state
- TRX/transceiver state
- WebSDR runtime metrics

Add osmobts_get_stats() API to expose these via WebSDR
interface and export it in Emscripten build

This enables programmatic access to data previously available
via VTY (e.g. "show stats", "show bts")

Change-Id: Ifb82adfab879a65ecd222c45e06551983aa90a0f
dtv.comp at

#21909 (May 4, 2026, 12:34:03 PM)

trx, bts: add optional WebSDR backend (callback-based transport)

Introduce WebSDR backend enabled via ENABLE_WEBSDR,
adding an alternative callback-based transport alongside
existing socket-based TRX/OSMUX I/O

Implement:
- TRX control via osmotrxlib_process_command()
- TRXD data via apitrx_tx_call()/trx_data_read()
- clock handling via apibts_clock_ind() and external timers
- Osmux integration via ws_osmux_* helpers

Adapt scheduler to support API-based burst submission and
external timer callbacks in WebSDR mode

Disable signal handling, stats and socket I/O when building
with ENABLE_WEBSDR

Add WebSDR API entrypoint, Emscripten build target and
example configuration

Enables running BTS/TRX stack in WebAssembly environments

Change-Id: Idebd588f33afd85021813ad5821391781db683a9
dtv.comp at

#21908 (May 1, 2026, 5:11:15 PM)

build: detect pthread_setname_np and sched_* APIs, guard usage

Add configure checks for pthread_setname_np and sched_* functions.
Wrap their usage with HAVE_* guards to avoid build failures on
platforms where they are unavailable.

Return -ENOTSUP for unsupported scheduler operations.

Improves portability across non-Linux and restricted environments
(e.g. WebAssembly).

Change-Id: Ic3f1492544439d88c5e6683330c6696de1c2f85b
dtv.comp at

#21907 (May 1, 2026, 5:11:06 PM)

transceiver: add optional WebSDR device support

- Add support for WebSDR devices enabled via the --with-websdr
configure flag.
- add libosmo-trx-websdr library and pkg-config file
- update .gitignore for wasm and pkg-config artifacts

Change-Id: Ia0d340c323c2eea28fbe82601ba0af7cfbd68f6d
dtv.comp at

#21906 (May 1, 2026, 5:10:49 PM)

device: add WebSDR radio backend

Introduce a new optional WebSDR device backend, enabled via
--with-websdr.

Add WebSDRDevice implementation and build integration, providing
a RadioDevice interface backed by callback hooks for control and
sample I/O.

Intended for Web-based deployments where osmo-trx interacts with
SDR hardware via a WebSDR/WebUSB frontend.

Change-Id: Ie459cbd70388dd8ff5b89221d30770bab0bd9014
dtv.comp at

#21905 (May 1, 2026, 5:09:18 PM)

trx: add JSON serialization for 'show trx'

Introduce trx_to_json() helper to serialize the output of
'show trx' into JSON format.

Also initialize talloc/VTY context in websdr entrypoint to
allow accessing TRX configuration programmatically.

Intended for external consumers (e.g. WebSDR frontend).

Change-Id: Icbfb754580daa6db9b5646cc6698a6a6ee1c1610
dtv.comp at

#21904 (May 1, 2026, 5:08:44 PM)

convolve: avoid function pointer casts by adding wrapper functions

Introduce _base_convolve_*_void() wrappers matching the expected
function pointer signatures and use them instead of casting
_base_convolve_* functions to (void *).

This removes unsafe function pointer casts and improves
type safety, which is required for stricter toolchains and
non-native targets (e.g. WebAssembly)

Change-Id: Idecb118be285eb3e4691d1761d0d8fa24fd80c75
dtv.comp at

#21903 (May 1, 2026, 5:08:35 PM)

build: detect pthread_setname_np and sched_* APIs, guard usage

Add configure checks for pthread_setname_np and sched_* functions.
Wrap their usage with HAVE_* guards to avoid build failures on
platforms where they are unavailable.

Return -ENOTSUP for unsupported scheduler operations.

Improves portability across non-Linux and restricted environments
(e.g. WebAssembly).

Change-Id: Ic3f1492544439d88c5e6683330c6696de1c2f85b
dtv.comp at

#21902 (May 1, 2026, 5:08:23 PM)

transceiver: add optional WebSDR device support

- Add support for WebSDR devices enabled via the --with-websdr
configure flag.
- add libosmo-trx-websdr library and pkg-config file
- update .gitignore for wasm and pkg-config artifacts

Change-Id: Ia0d340c323c2eea28fbe82601ba0af7cfbd68f6d
dtv.comp at

#21901 (May 1, 2026, 5:08:21 PM)

trx: add JSON serialization for 'show trx'

Introduce trx_to_json() helper to serialize the output of
'show trx' into JSON format.

Also initialize talloc/VTY context in websdr entrypoint to
allow accessing TRX configuration programmatically.

Intended for external consumers (e.g. WebSDR frontend).

Change-Id: Icbfb754580daa6db9b5646cc6698a6a6ee1c1610
dtv.comp at

#21900 (May 1, 2026, 5:08:13 PM)

convolve: avoid function pointer casts by adding wrapper functions

Introduce _base_convolve_*_void() wrappers matching the expected
function pointer signatures and use them instead of casting
_base_convolve_* functions to (void *).

This removes unsafe function pointer casts and improves
type safety, which is required for stricter toolchains and
non-native targets (e.g. WebAssembly)

Change-Id: Idecb118be285eb3e4691d1761d0d8fa24fd80c75
dtv.comp at

#21899 (May 1, 2026, 5:08:06 PM)

device: add WebSDR radio backend

Introduce a new optional WebSDR device backend, enabled via
--with-websdr.

Add WebSDRDevice implementation and build integration, providing
a RadioDevice interface backed by callback hooks for control and
sample I/O.

Intended for Web-based deployments where osmo-trx interacts with
SDR hardware via a WebSDR/WebUSB frontend.

Change-Id: Ie459cbd70388dd8ff5b89221d30770bab0bd9014
dtv.comp at

#21898 (May 1, 2026, 5:01:51 PM)

device: add WebSDR radio backend

Introduce a new optional WebSDR device backend, enabled via
--with-websdr.

Add WebSDRDevice implementation and build integration, providing
a RadioDevice interface backed by callback hooks for control and
sample I/O.

Intended for Web-based deployments where osmo-trx interacts with
SDR hardware via a WebSDR/WebUSB frontend.

Change-Id: Ie459cbd70388dd8ff5b89221d30770bab0bd9014
dtv.comp at

#21897 (May 1, 2026, 5:01:50 PM)

trx: add JSON serialization for 'show trx'

Introduce trx_to_json() helper to serialize the output of
'show trx' into JSON format.

Also initialize talloc/VTY context in websdr entrypoint to
allow accessing TRX configuration programmatically.

Intended for external consumers (e.g. WebSDR frontend).

Change-Id: Icbfb754580daa6db9b5646cc6698a6a6ee1c1610
dtv.comp at

#21896 (May 1, 2026, 4:59:16 PM)

transceiver: add optional WebSDR device support

- Add support for WebSDR devices enabled via the --with-websdr
configure flag.
- add libosmo-trx-websdr library and pkg-config file
- update .gitignore for wasm and pkg-config artifacts

Change-Id: Ia0d340c323c2eea28fbe82601ba0af7cfbd68f6d
dtv.comp at

#21895 (May 1, 2026, 4:59:15 PM)

build: detect pthread_setname_np and sched_* APIs, guard usage

Add configure checks for pthread_setname_np and sched_* functions.
Wrap their usage with HAVE_* guards to avoid build failures on
platforms where they are unavailable.

Return -ENOTSUP for unsupported scheduler operations.

Improves portability across non-Linux and restricted environments
(e.g. WebAssembly).

Change-Id: Ic3f1492544439d88c5e6683330c6696de1c2f85b
dtv.comp at

#21894 (May 1, 2026, 4:59:15 PM)

convolve: avoid function pointer casts by adding wrapper functions

Introduce _base_convolve_*_void() wrappers matching the expected
function pointer signatures and use them instead of casting
_base_convolve_* functions to (void *).

This removes unsafe function pointer casts and improves
type safety, which is required for stricter toolchains and
non-native targets (e.g. WebAssembly)

Change-Id: Idecb118be285eb3e4691d1761d0d8fa24fd80c75
dtv.comp at

#21893 (May 1, 2026, 4:59:15 PM)

device: add WebSDR radio backend

Introduce a new optional WebSDR device backend, enabled via
--with-websdr.

Add WebSDRDevice implementation and build integration, providing
a RadioDevice interface backed by callback hooks for control and
sample I/O.

Intended for Web-based deployments where osmo-trx interacts with
SDR hardware via a WebSDR/WebUSB frontend.

Change-Id: Ie459cbd70388dd8ff5b89221d30770bab0bd9014
dtv.comp at

#21892 (May 1, 2026, 4:59:15 PM)

trx: add JSON serialization for 'show trx'

Introduce trx_to_json() helper to serialize the output of
'show trx' into JSON format.

Also initialize talloc/VTY context in websdr entrypoint to
allow accessing TRX configuration programmatically.

Intended for external consumers (e.g. WebSDR frontend).

Change-Id: Icbfb754580daa6db9b5646cc6698a6a6ee1c1610
dtv.comp at

#21891 (May 1, 2026, 4:59:14 PM)

transceiver: add optional WebSDR device support

- Add support for WebSDR devices enabled via the --with-websdr
configure flag.
- add libosmo-trx-websdr library and pkg-config file
- update .gitignore for wasm and pkg-config artifacts

Change-Id: Ia0d340c323c2eea28fbe82601ba0af7cfbd68f6d
dtv.comp at

#21890 (May 1, 2026, 4:59:13 PM)

build: detect pthread_setname_np and sched_* APIs, guard usage

Add configure checks for pthread_setname_np and sched_* functions.
Wrap their usage with HAVE_* guards to avoid build failures on
platforms where they are unavailable.

Return -ENOTSUP for unsupported scheduler operations.

Improves portability across non-Linux and restricted environments
(e.g. WebAssembly).

Change-Id: Ic3f1492544439d88c5e6683330c6696de1c2f85b
dtv.comp at

#21889 (May 1, 2026, 4:59:13 PM)

convolve: avoid function pointer casts by adding wrapper functions

Introduce _base_convolve_*_void() wrappers matching the expected
function pointer signatures and use them instead of casting
_base_convolve_* functions to (void *).

This removes unsafe function pointer casts and improves
type safety, which is required for stricter toolchains and
non-native targets (e.g. WebAssembly)

Change-Id: Idecb118be285eb3e4691d1761d0d8fa24fd80c75
dtv.comp at

#21888 (May 1, 2026, 4:34:51 PM)

trx: split TRXD parsing from socket callback

Extract TRXD message parsing into trx_data_read() and
reuse it from trx_data_read_cb()

This decouples parsing from socket I/O and allows reuse
with alternative transports

No functional changes intended

Change-Id: I50ad8b6d2edfd91f2d569cd8badf5c036fbf87ed
dtv.comp at

#21887 (May 1, 2026, 4:34:50 PM)

trx: factor out clock indication handling into helper

Extract clock indication handling logic into trx_clk_phy()
and reuse it from trx_clk_read_cb()

This separates core FN processing from socket-specific code
and prepares for alternative clock sources (e.g. non-UDP /
in-memory callbacks used in WebSDR/WASM builds).

No functional changes intended

Change-Id: I0e6b3e25da14ada4d0ef86fd4c4e6bbc12e447d2
dtv.comp at

#21886 (May 1, 2026, 4:34:50 PM)

trx: factor out burst submission into helper

Extract TRXD burst submission logic from bts_sched_flush_buffers()
into trx_sched_submit_bursts()

No functional changes intended, this prepares for alternative
backends reusing the same scheduling logic

Change-Id: I7ce61bee4ca7ca50ef190982f1a0e4ce57c8c838
dtv.comp at

#21885 (May 1, 2026, 4:34:49 PM)

trx: factor out FN timer processing into common helper

Extract core FN timer handling logic into trx_fn_timer_process()
to decouple it from timerfd-specific code.

This allows reusing the same scheduling logic for alternative
timer backends (e.g. WebSDR) while keeping timerfd integration
as a thin wrapper.

No functional changes intended.

Change-Id: Ia28cce57afb3dc97c8655e855ebd5ace7e096648
dtv.comp at

#21884 (May 1, 2026, 4:34:38 PM)

trx: factor out TRXD data submission helper

Extract TRXD data sending into trx_data_submit_msg() and
reuse it from trx_if_send_burst()

This separates transport-specific I/O from message construction
and prepares for alternative backends

No functional changes intended

Change-Id: Ie89ac6efe2f5af0b4cbe5a259a18770b8d2de859
dtv.comp at

#21883 (May 1, 2026, 4:34:32 PM)

build: make sched_* usage optional

Add configure checks for sched_* APIs and guard usage of
sched_setscheduler with HAVE_SCHED_SETSCHEDULER.

This avoids build/runtime issues on platforms without
scheduler support.

Change-Id: I5af357c1e2074fa1e05ac6bc20af8535c474d906
dtv.comp at

#21882 (May 1, 2026, 4:34:30 PM)

abis: add helper to update BTS identity

Introduce abis_update_bts_info() to update site_id and bts_id in
bts_dev_info at runtime

This allows adjusting BTS identity after initialization,
e.g. from external control interfaces

Change-Id: Ibafd66a1e1dc42ad0063c412087bee10d212fe33
dtv.comp at

#21881 (May 1, 2026, 4:34:30 PM)

smux: allow lchan lookup without remote address

Make rem_addr optional in osmux_lchan_find() by skipping
address comparison when it is NULL

This allows callers without socket-based addressing to
locate lchans by CID only (e.g. callback-based transports)

Change-Id: I7a275dad2353241c7b04cdb5d6cc1436a175c1f3
dtv.comp at

#21880 (May 1, 2026, 4:34:26 PM)

bts: guard AMR RTP decoder stub with HAVE_LIBOSMOCODEC_STATIC

Disable dummy osmo_amr_rtp_dec() implementation when
linking against static libosmocodec to avoid symbol
conflicts

Apply to omldummy and virtual BTS models

Change-Id: Ie19ae2013893575a2f74a87af2151034abf57870
dtv.comp at

#21879 (May 1, 2026, 4:34:23 PM)

trx: add JSON stats export for WebSDR API

Introduce stats_json.c providing JSON serialization for:
- stats and counters
- rate counters
- BTS state
- TRX/transceiver state
- WebSDR runtime metrics

Add osmobts_get_stats() API to expose these via WebSDR
interface and export it in Emscripten build

This enables programmatic access to data previously available
via VTY (e.g. "show stats", "show bts")

Change-Id: Ifb82adfab879a65ecd222c45e06551983aa90a0f
dtv.comp at

#21878 (May 1, 2026, 4:33:37 PM)

trx: factor out TRX ctrl message submission

Extract TRX control message sending logic into
trx_ctrl_submit_msg() and reuse it from trx_ctrl_send()

This separates message construction from transport-specific
submission and prepares for alternative backends

No functional changes intended

Change-Id: Ibbd50117db4531efbc374e43e3802f9f995362cd
dtv.comp at

#21877 (May 1, 2026, 4:33:36 PM)

trx, bts: add optional WebSDR backend (callback-based transport)

Introduce WebSDR backend enabled via ENABLE_WEBSDR,
adding an alternative callback-based transport alongside
existing socket-based TRX/OSMUX I/O

Implement:
- TRX control via osmotrxlib_process_command()
- TRXD data via apitrx_tx_call()/trx_data_read()
- clock handling via apibts_clock_ind() and external timers
- Osmux integration via ws_osmux_* helpers

Adapt scheduler to support API-based burst submission and
external timer callbacks in WebSDR mode

Disable signal handling, stats and socket I/O when building
with ENABLE_WEBSDR

Add WebSDR API entrypoint, Emscripten build target and
example configuration

Enables running BTS/TRX stack in WebAssembly environments

Change-Id: Idebd588f33afd85021813ad5821391781db683a9
dtv.comp at

#21876 (May 1, 2026, 4:33:35 PM)

trx: split TRX ctrl response parsing from socket callback

Extract TRX control response parsing logic into
trx_ctrl_parse_rsp() and call it from trx_ctrl_read_cb()

This decouples parsing from socket I/O and allows reuse
with alternative transports

No functional changes intended

Change-Id: I255c7d554aad3ac6df2c66716fae1c1fb512110e
dtv.comp at

#21875 (May 1, 2026, 4:33:34 PM)

build: add WebSDR configure option and Emscripten detection

Detect Emscripten toolchain and introduce --with-websdr
configure option

When enabled, check for libosmo-trx-websdr and required
symbol modulateBits, failing configure if missing

Change-Id: Iff4b76e339e2873686c8c15885dd498458ceb546
dtv.comp at

#21874 (May 1, 2026, 4:33:33 PM)

trx: handle synchronous TRX control callbacks in provision FSM

Set *_sent flags before issuing TRX control commands to ensure
correct state when responses are delivered synchronously
(e.g. WebUSB callback path)

Also guard FSM state handling in st_open_poweroff() to avoid
duplicate transitions if state was already changed by a
synchronous response

No functional change for asynchronous (socket-based) backends

Change-Id: I50c95e3796839e9fe721bff6f96fed4c490c6018
dtv.comp at

#21873 (May 1, 2026, 4:33:33 PM)

trx: split TRXD parsing from socket callback

Extract TRXD message parsing into trx_data_read() and
reuse it from trx_data_read_cb()

This decouples parsing from socket I/O and allows reuse
with alternative transports

No functional changes intended

Change-Id: I50ad8b6d2edfd91f2d569cd8badf5c036fbf87ed
dtv.comp at

#21872 (May 1, 2026, 4:33:29 PM)

trx: factor out clock indication handling into helper

Extract clock indication handling logic into trx_clk_phy()
and reuse it from trx_clk_read_cb()

This separates core FN processing from socket-specific code
and prepares for alternative clock sources (e.g. non-UDP /
in-memory callbacks used in WebSDR/WASM builds).

No functional changes intended

Change-Id: I0e6b3e25da14ada4d0ef86fd4c4e6bbc12e447d2
dtv.comp at

#21871 (May 1, 2026, 4:33:28 PM)

abis: add helper to update BTS identity

Introduce abis_update_bts_info() to update site_id and bts_id in
bts_dev_info at runtime

This allows adjusting BTS identity after initialization,
e.g. from external control interfaces

Change-Id: Ibafd66a1e1dc42ad0063c412087bee10d212fe33
dtv.comp at

#21870 (May 1, 2026, 4:33:28 PM)

trx: factor out FN timer processing into common helper

Extract core FN timer handling logic into trx_fn_timer_process()
to decouple it from timerfd-specific code.

This allows reusing the same scheduling logic for alternative
timer backends (e.g. WebSDR) while keeping timerfd integration
as a thin wrapper.

No functional changes intended.

Change-Id: Ia28cce57afb3dc97c8655e855ebd5ace7e096648
dtv.comp at

#21869 (May 1, 2026, 4:33:25 PM)

smux: allow lchan lookup without remote address

Make rem_addr optional in osmux_lchan_find() by skipping
address comparison when it is NULL

This allows callers without socket-based addressing to
locate lchans by CID only (e.g. callback-based transports)

Change-Id: I7a275dad2353241c7b04cdb5d6cc1436a175c1f3
dtv.comp at

#21868 (May 1, 2026, 4:32:27 PM)

build: make sched_* usage optional

Add configure checks for sched_* APIs and guard usage of
sched_setscheduler with HAVE_SCHED_SETSCHEDULER.

This avoids build/runtime issues on platforms without
scheduler support.

Change-Id: I5af357c1e2074fa1e05ac6bc20af8535c474d906
dtv.comp at

#21867 (May 1, 2026, 4:32:25 PM)

trx: factor out TRXD data submission helper

Extract TRXD data sending into trx_data_submit_msg() and
reuse it from trx_if_send_burst()

This separates transport-specific I/O from message construction
and prepares for alternative backends

No functional changes intended

Change-Id: Ie89ac6efe2f5af0b4cbe5a259a18770b8d2de859
dtv.comp at

#21866 (May 1, 2026, 4:32:25 PM)

trx: split TRX ctrl response parsing from socket callback

Extract TRX control response parsing logic into
trx_ctrl_parse_rsp() and call it from trx_ctrl_read_cb()

This decouples parsing from socket I/O and allows reuse
with alternative transports

No functional changes intended

Change-Id: I255c7d554aad3ac6df2c66716fae1c1fb512110e
dtv.comp at

#21865 (May 1, 2026, 4:32:23 PM)

trx: factor out burst submission into helper

Extract TRXD burst submission logic from bts_sched_flush_buffers()
into trx_sched_submit_bursts()

No functional changes intended, this prepares for alternative
backends reusing the same scheduling logic

Change-Id: I7ce61bee4ca7ca50ef190982f1a0e4ce57c8c838
dtv.comp at

#21864 (May 1, 2026, 4:32:23 PM)

bts: guard AMR RTP decoder stub with HAVE_LIBOSMOCODEC_STATIC

Disable dummy osmo_amr_rtp_dec() implementation when
linking against static libosmocodec to avoid symbol
conflicts

Apply to omldummy and virtual BTS models

Change-Id: Ie19ae2013893575a2f74a87af2151034abf57870
dtv.comp at

#21863 (May 1, 2026, 4:32:22 PM)

trx: add JSON stats export for WebSDR API

Introduce stats_json.c providing JSON serialization for:
- stats and counters
- rate counters
- BTS state
- TRX/transceiver state
- WebSDR runtime metrics

Add osmobts_get_stats() API to expose these via WebSDR
interface and export it in Emscripten build

This enables programmatic access to data previously available
via VTY (e.g. "show stats", "show bts")

Change-Id: Ifb82adfab879a65ecd222c45e06551983aa90a0f
dtv.comp at

#21862 (May 1, 2026, 4:32:21 PM)

trx: factor out TRX ctrl message submission

Extract TRX control message sending logic into
trx_ctrl_submit_msg() and reuse it from trx_ctrl_send()

This separates message construction from transport-specific
submission and prepares for alternative backends

No functional changes intended

Change-Id: Ibbd50117db4531efbc374e43e3802f9f995362cd
dtv.comp at

#21861 (May 1, 2026, 4:32:21 PM)

trx, bts: add optional WebSDR backend (callback-based transport)

Introduce WebSDR backend enabled via ENABLE_WEBSDR,
adding an alternative callback-based transport alongside
existing socket-based TRX/OSMUX I/O

Implement:
- TRX control via osmotrxlib_process_command()
- TRXD data via apitrx_tx_call()/trx_data_read()
- clock handling via apibts_clock_ind() and external timers
- Osmux integration via ws_osmux_* helpers

Adapt scheduler to support API-based burst submission and
external timer callbacks in WebSDR mode

Disable signal handling, stats and socket I/O when building
with ENABLE_WEBSDR

Add WebSDR API entrypoint, Emscripten build target and
example configuration

Enables running BTS/TRX stack in WebAssembly environments

Change-Id: Idebd588f33afd85021813ad5821391781db683a9
dtv.comp at

#21860 (May 1, 2026, 4:32:21 PM)

build: add WebSDR configure option and Emscripten detection

Detect Emscripten toolchain and introduce --with-websdr
configure option

When enabled, check for libosmo-trx-websdr and required
symbol modulateBits, failing configure if missing

Change-Id: Iff4b76e339e2873686c8c15885dd498458ceb546
dtv.comp at

#21859 (May 1, 2026, 4:32:20 PM)

trx: handle synchronous TRX control callbacks in provision FSM

Set *_sent flags before issuing TRX control commands to ensure
correct state when responses are delivered synchronously
(e.g. WebUSB callback path)

Also guard FSM state handling in st_open_poweroff() to avoid
duplicate transitions if state was already changed by a
synchronous response

No functional change for asynchronous (socket-based) backends

Change-Id: I50c95e3796839e9fe721bff6f96fed4c490c6018
dtv.comp at

#21858 (Apr 30, 2026, 3:52:36 PM)

tcap_as_loadshare: Clarify name of tcap asp selection function

Change-Id: I327ad282d2689be2bcf7d3da23026717923c9325
dwillmann at

#21857 (Apr 30, 2026, 3:52:35 PM)

tcap_as_loadshare: Route msg based on TCAP route if cache lookup fails

Related: SYS#5423
Change-Id: I2fd9068be8a0a512b17c8bd2365aa87c266e5669
dwillmann at

#21856 (Apr 30, 2026, 3:52:30 PM)

tcap_as_loadshare: Route msg based on TCAP route if cache lookup fails

Related: SYS#5423
Change-Id: I2fd9068be8a0a512b17c8bd2365aa87c266e5669
dwillmann at

#21855 (Apr 30, 2026, 3:52:29 PM)

tcap_as_loadshare: Clarify name of tcap asp selection function

Change-Id: I327ad282d2689be2bcf7d3da23026717923c9325
dwillmann at

#21854 (Apr 29, 2026, 9:26:41 PM)

trx: split TRX ctrl response parsing from socket callback

Extract TRX control response parsing logic into
trx_ctrl_parse_rsp() and call it from trx_ctrl_read_cb()

This decouples parsing from socket I/O and allows reuse
with alternative transports

No functional changes intended

Change-Id: I255c7d554aad3ac6df2c66716fae1c1fb512110e
dtv.comp at

#21853 (Apr 29, 2026, 9:26:38 PM)

trx, bts: add optional WebSDR backend (callback-based transport)

Introduce WebSDR backend enabled via ENABLE_WEBSDR,
adding an alternative callback-based transport alongside
existing socket-based TRX/OSMUX I/O

Implement:
- TRX control via osmotrxlib_process_command()
- TRXD data via apitrx_tx_call()/trx_data_read()
- clock handling via apibts_clock_ind() and external timers
- Osmux integration via ws_osmux_* helpers

Adapt scheduler to support API-based burst submission and
external timer callbacks in WebSDR mode

Disable signal handling, stats and socket I/O when building
with ENABLE_WEBSDR

Add WebSDR API entrypoint, Emscripten build target and
example configuration

Enables running BTS/TRX stack in WebAssembly environments

Change-Id: Idebd588f33afd85021813ad5821391781db683a9
dtv.comp at

#21852 (Apr 29, 2026, 9:26:38 PM)

trx: factor out clock indication handling into helper

Extract clock indication handling logic into trx_clk_phy()
and reuse it from trx_clk_read_cb()

This separates core FN processing from socket-specific code
and prepares for alternative clock sources (e.g. non-UDP /
in-memory callbacks used in WebSDR/WASM builds).

No functional changes intended

Change-Id: I0e6b3e25da14ada4d0ef86fd4c4e6bbc12e447d2
dtv.comp at

#21851 (Apr 29, 2026, 9:26:35 PM)

trx: split TRXD parsing from socket callback

Extract TRXD message parsing into trx_data_read() and
reuse it from trx_data_read_cb()

This decouples parsing from socket I/O and allows reuse
with alternative transports

No functional changes intended

Change-Id: I50ad8b6d2edfd91f2d569cd8badf5c036fbf87ed
dtv.comp at

#21850 (Apr 29, 2026, 9:26:17 PM)

trx: add JSON stats export for WebSDR API

Introduce stats_json.c providing JSON serialization for:
- stats and counters
- rate counters
- BTS state
- TRX/transceiver state
- WebSDR runtime metrics

Add osmobts_get_stats() API to expose these via WebSDR
interface and export it in Emscripten build

This enables programmatic access to data previously available
via VTY (e.g. "show stats", "show bts")

Change-Id: Ifb82adfab879a65ecd222c45e06551983aa90a0f
dtv.comp at

#21849 (Apr 29, 2026, 9:26:13 PM)

bts: guard AMR RTP decoder stub with HAVE_LIBOSMOCODEC_STATIC

Disable dummy osmo_amr_rtp_dec() implementation when
linking against static libosmocodec to avoid symbol
conflicts

Apply to omldummy and virtual BTS models

Change-Id: Ie19ae2013893575a2f74a87af2151034abf57870
dtv.comp at

#21848 (Apr 29, 2026, 9:25:08 PM)

build: make sched_* usage optional

Add configure checks for sched_* APIs and guard usage of
sched_setscheduler with HAVE_SCHED_SETSCHEDULER.

This avoids build/runtime issues on platforms without
scheduler support.

Change-Id: I5af357c1e2074fa1e05ac6bc20af8535c474d906
dtv.comp at

#21847 (Apr 29, 2026, 9:25:07 PM)

trx: factor out burst submission into helper

Extract TRXD burst submission logic from bts_sched_flush_buffers()
into trx_sched_submit_bursts()

No functional changes intended, this prepares for alternative
backends reusing the same scheduling logic

Change-Id: I7ce61bee4ca7ca50ef190982f1a0e4ce57c8c838
dtv.comp at

#21846 (Apr 29, 2026, 9:25:06 PM)

trx: handle synchronous TRX control callbacks in provision FSM

Set *_sent flags before issuing TRX control commands to ensure
correct state when responses are delivered synchronously
(e.g. WebUSB callback path)

Also guard FSM state handling in st_open_poweroff() to avoid
duplicate transitions if state was already changed by a
synchronous response

No functional change for asynchronous (socket-based) backends

Change-Id: I50c95e3796839e9fe721bff6f96fed4c490c6018
dtv.comp at

#21845 (Apr 29, 2026, 9:25:05 PM)

smux: allow lchan lookup without remote address

Make rem_addr optional in osmux_lchan_find() by skipping
address comparison when it is NULL

This allows callers without socket-based addressing to
locate lchans by CID only (e.g. callback-based transports)

Change-Id: I7a275dad2353241c7b04cdb5d6cc1436a175c1f3
dtv.comp at

#21844 (Apr 29, 2026, 9:25:04 PM)

trx: factor out TRX ctrl message submission

Extract TRX control message sending logic into
trx_ctrl_submit_msg() and reuse it from trx_ctrl_send()

This separates message construction from transport-specific
submission and prepares for alternative backends

No functional changes intended

Change-Id: Ibbd50117db4531efbc374e43e3802f9f995362cd
dtv.comp at

#21843 (Apr 29, 2026, 9:24:58 PM)

abis: add helper to update BTS identity

Introduce abis_update_bts_info() to update site_id and bts_id in
bts_dev_info at runtime

This allows adjusting BTS identity after initialization,
e.g. from external control interfaces

Change-Id: Ibafd66a1e1dc42ad0063c412087bee10d212fe33
dtv.comp at

#21842 (Apr 29, 2026, 9:24:58 PM)

trx: factor out TRXD data submission helper

Extract TRXD data sending into trx_data_submit_msg() and
reuse it from trx_if_send_burst()

This separates transport-specific I/O from message construction
and prepares for alternative backends

No functional changes intended

Change-Id: Ie89ac6efe2f5af0b4cbe5a259a18770b8d2de859
dtv.comp at

#21841 (Apr 29, 2026, 9:24:57 PM)

build: add WebSDR configure option and Emscripten detection

Detect Emscripten toolchain and introduce --with-websdr
configure option

When enabled, check for libosmo-trx-websdr and required
symbol modulateBits, failing configure if missing

Change-Id: Iff4b76e339e2873686c8c15885dd498458ceb546
dtv.comp at

#21840 (Apr 29, 2026, 9:24:53 PM)

trx: factor out FN timer processing into common helper

Extract core FN timer handling logic into trx_fn_timer_process()
to decouple it from timerfd-specific code.

This allows reusing the same scheduling logic for alternative
timer backends (e.g. WebSDR) while keeping timerfd integration
as a thin wrapper.

No functional changes intended.

Change-Id: Ia28cce57afb3dc97c8655e855ebd5ace7e096648
dtv.comp at

#21839 (Apr 29, 2026, 9:24:52 PM)

trx: factor out FN timer processing into common helper

Extract core FN timer handling logic into trx_fn_timer_process()
to decouple it from timerfd-specific code.

This allows reusing the same scheduling logic for alternative
timer backends (e.g. WebSDR) while keeping timerfd integration
as a thin wrapper.

No functional changes intended.

Change-Id: Ia28cce57afb3dc97c8655e855ebd5ace7e096648
dtv.comp at

#21838 (Apr 29, 2026, 9:24:47 PM)

trx: add JSON stats export for WebSDR API

Introduce stats_json.c providing JSON serialization for:
- stats and counters
- rate counters
- BTS state
- TRX/transceiver state
- WebSDR runtime metrics

Add osmobts_get_stats() API to expose these via WebSDR
interface and export it in Emscripten build

This enables programmatic access to data previously available
via VTY (e.g. "show stats", "show bts")

Change-Id: Ifb82adfab879a65ecd222c45e06551983aa90a0f
dtv.comp at

#21837 (Apr 29, 2026, 9:24:45 PM)

trx: handle synchronous TRX control callbacks in provision FSM

Set *_sent flags before issuing TRX control commands to ensure
correct state when responses are delivered synchronously
(e.g. WebUSB callback path)

Also guard FSM state handling in st_open_poweroff() to avoid
duplicate transitions if state was already changed by a
synchronous response

No functional change for asynchronous (socket-based) backends

Change-Id: I50c95e3796839e9fe721bff6f96fed4c490c6018
dtv.comp at

#21836 (Apr 29, 2026, 9:23:41 PM)

trx, bts: add optional WebSDR backend (callback-based transport)

Introduce WebSDR backend enabled via ENABLE_WEBSDR,
adding an alternative callback-based transport alongside
existing socket-based TRX/OSMUX I/O

Implement:
- TRX control via osmotrxlib_process_command()
- TRXD data via apitrx_tx_call()/trx_data_read()
- clock handling via apibts_clock_ind() and external timers
- Osmux integration via ws_osmux_* helpers

Adapt scheduler to support API-based burst submission and
external timer callbacks in WebSDR mode

Disable signal handling, stats and socket I/O when building
with ENABLE_WEBSDR

Add WebSDR API entrypoint, Emscripten build target and
example configuration

Enables running BTS/TRX stack in WebAssembly environments

Change-Id: Idebd588f33afd85021813ad5821391781db683a9
dtv.comp at

#21835 (Apr 29, 2026, 9:23:14 PM)

smux: allow lchan lookup without remote address

Make rem_addr optional in osmux_lchan_find() by skipping
address comparison when it is NULL

This allows callers without socket-based addressing to
locate lchans by CID only (e.g. callback-based transports)

Change-Id: I7a275dad2353241c7b04cdb5d6cc1436a175c1f3
dtv.comp at

#21834 (Apr 29, 2026, 9:23:14 PM)

trx: factor out TRX ctrl message submission

Extract TRX control message sending logic into
trx_ctrl_submit_msg() and reuse it from trx_ctrl_send()

This separates message construction from transport-specific
submission and prepares for alternative backends

No functional changes intended

Change-Id: Ibbd50117db4531efbc374e43e3802f9f995362cd
dtv.comp at

#21833 (Apr 29, 2026, 9:23:13 PM)

build: add WebSDR configure option and Emscripten detection

Detect Emscripten toolchain and introduce --with-websdr
configure option

When enabled, check for libosmo-trx-websdr and required
symbol modulateBits, failing configure if missing

Change-Id: Iff4b76e339e2873686c8c15885dd498458ceb546
dtv.comp at

#21832 (Apr 29, 2026, 9:23:12 PM)

trx: split TRXD parsing from socket callback

Extract TRXD message parsing into trx_data_read() and
reuse it from trx_data_read_cb()

This decouples parsing from socket I/O and allows reuse
with alternative transports

No functional changes intended

Change-Id: I50ad8b6d2edfd91f2d569cd8badf5c036fbf87ed
dtv.comp at

#21831 (Apr 29, 2026, 9:23:11 PM)

trx: factor out burst submission into helper

Extract TRXD burst submission logic from bts_sched_flush_buffers()
into trx_sched_submit_bursts()

No functional changes intended, this prepares for alternative
backends reusing the same scheduling logic

Change-Id: I7ce61bee4ca7ca50ef190982f1a0e4ce57c8c838
dtv.comp at

#21830 (Apr 29, 2026, 9:23:10 PM)

trx: factor out TRXD data submission helper

Extract TRXD data sending into trx_data_submit_msg() and
reuse it from trx_if_send_burst()

This separates transport-specific I/O from message construction
and prepares for alternative backends

No functional changes intended

Change-Id: Ie89ac6efe2f5af0b4cbe5a259a18770b8d2de859
dtv.comp at

#21829 (Apr 29, 2026, 9:23:10 PM)

trx: factor out clock indication handling into helper

Extract clock indication handling logic into trx_clk_phy()
and reuse it from trx_clk_read_cb()

This separates core FN processing from socket-specific code
and prepares for alternative clock sources (e.g. non-UDP /
in-memory callbacks used in WebSDR/WASM builds).

No functional changes intended

Change-Id: I0e6b3e25da14ada4d0ef86fd4c4e6bbc12e447d2
dtv.comp at

#21828 (Apr 29, 2026, 9:23:09 PM)

trx: split TRX ctrl response parsing from socket callback

Extract TRX control response parsing logic into
trx_ctrl_parse_rsp() and call it from trx_ctrl_read_cb()

This decouples parsing from socket I/O and allows reuse
with alternative transports

No functional changes intended

Change-Id: I255c7d554aad3ac6df2c66716fae1c1fb512110e
dtv.comp at

#21827 (Apr 29, 2026, 9:23:08 PM)

bts: guard AMR RTP decoder stub with HAVE_LIBOSMOCODEC_STATIC

Disable dummy osmo_amr_rtp_dec() implementation when
linking against static libosmocodec to avoid symbol
conflicts

Apply to omldummy and virtual BTS models

Change-Id: Ie19ae2013893575a2f74a87af2151034abf57870
dtv.comp at

#21826 (Apr 29, 2026, 9:23:08 PM)

abis: add helper to update BTS identity

Introduce abis_update_bts_info() to update site_id and bts_id in
bts_dev_info at runtime

This allows adjusting BTS identity after initialization,
e.g. from external control interfaces

Change-Id: Ibafd66a1e1dc42ad0063c412087bee10d212fe33
dtv.comp at

#21825 (Apr 29, 2026, 9:23:07 PM)

build: make sched_* usage optional

Add configure checks for sched_* APIs and guard usage of
sched_setscheduler with HAVE_SCHED_SETSCHEDULER.

This avoids build/runtime issues on platforms without
scheduler support.

Change-Id: I5af357c1e2074fa1e05ac6bc20af8535c474d906
dtv.comp at

#21824 (Apr 29, 2026, 9:20:24 PM)

transceiver: add optional Laurent burst LUT modulation (int16)

Introduce an optional Burst LUT optimization for Laurent-based burst
modulation, enabled via --with-burst-lut.

- Add precomputed Laurent LUT tables (float and int16 I/Q variants)
- Generate LUT at initialization (prepareBurstLUT)
- Use LUT-based modulation for sps=4 when enabled
- Add configure.ac option and USE_BURST_LUT define

This reduces runtime computation by replacing per-burst Laurent
processing with memcpy-based LUT lookups.

Change-Id: I1715c2d33dc55fe1c7be5c6e7259d378ea5e80b2
dtv.comp at

#21823 (Apr 29, 2026, 9:20:22 PM)

transceiver: add optional Laurent burst LUT modulation (int16)

Introduce an optional Burst LUT optimization for Laurent-based burst
modulation, enabled via --with-burst-lut.

- Add precomputed Laurent LUT tables (float and int16 I/Q variants)
- Generate LUT at initialization (prepareBurstLUT)
- Use LUT-based modulation for sps=4 when enabled
- Add configure.ac option and USE_BURST_LUT define

This reduces runtime computation by replacing per-burst Laurent
processing with memcpy-based LUT lookups.

Change-Id: I1715c2d33dc55fe1c7be5c6e7259d378ea5e80b2
dtv.comp at

#21822 (Apr 29, 2026, 8:39:46 PM)

trx: factor out FN timer processing into common helper

Extract core FN timer handling logic into trx_fn_timer_process()
to decouple it from timerfd-specific code.

This allows reusing the same scheduling logic for alternative
timer backends (e.g. WebSDR) while keeping timerfd integration
as a thin wrapper.

No functional changes intended.

Change-Id: Ia28cce57afb3dc97c8655e855ebd5ace7e096648
dtv.comp at

#21821 (Apr 29, 2026, 8:39:43 PM)

trx: factor out clock indication handling into helper

Extract clock indication handling logic into trx_clk_phy()
and reuse it from trx_clk_read_cb()

This separates core FN processing from socket-specific code
and prepares for alternative clock sources (e.g. non-UDP /
in-memory callbacks used in WebSDR/WASM builds).

No functional changes intended

Change-Id: I0e6b3e25da14ada4d0ef86fd4c4e6bbc12e447d2
dtv.comp at

#21820 (Apr 29, 2026, 8:39:37 PM)

trx: handle synchronous TRX control callbacks in provision FSM

Set *_sent flags before issuing TRX control commands to ensure
correct state when responses are delivered synchronously
(e.g. WebUSB callback path)

Also guard FSM state handling in st_open_poweroff() to avoid
duplicate transitions if state was already changed by a
synchronous response

No functional change for asynchronous (socket-based) backends

Change-Id: I50c95e3796839e9fe721bff6f96fed4c490c6018
dtv.comp at

#21819 (Apr 29, 2026, 8:38:49 PM)

build: make sched_* usage optional

Add configure checks for sched_* APIs and guard usage of
sched_setscheduler with HAVE_SCHED_SETSCHEDULER.

This avoids build/runtime issues on platforms without
scheduler support.

Change-Id: I5af357c1e2074fa1e05ac6bc20af8535c474d906
dtv.comp at

#21818 (Apr 29, 2026, 8:38:44 PM)

trx: factor out burst submission into helper

Extract TRXD burst submission logic from bts_sched_flush_buffers()
into trx_sched_submit_bursts()

No functional changes intended, this prepares for alternative
backends reusing the same scheduling logic

Change-Id: I7ce61bee4ca7ca50ef190982f1a0e4ce57c8c838
dtv.comp at

#21817 (Apr 29, 2026, 8:38:37 PM)

bts: guard AMR RTP decoder stub with HAVE_LIBOSMOCODEC_STATIC

Disable dummy osmo_amr_rtp_dec() implementation when
linking against static libosmocodec to avoid symbol
conflicts

Apply to omldummy and virtual BTS models

Change-Id: Ie19ae2013893575a2f74a87af2151034abf57870
dtv.comp at

#21816 (Apr 29, 2026, 8:38:33 PM)

trx: split TRXD parsing from socket callback

Extract TRXD message parsing into trx_data_read() and
reuse it from trx_data_read_cb()

This decouples parsing from socket I/O and allows reuse
with alternative transports

No functional changes intended

Change-Id: I50ad8b6d2edfd91f2d569cd8badf5c036fbf87ed
dtv.comp at

#21815 (Apr 29, 2026, 8:38:20 PM)

trx: factor out TRXD data submission helper

Extract TRXD data sending into trx_data_submit_msg() and
reuse it from trx_if_send_burst()

This separates transport-specific I/O from message construction
and prepares for alternative backends

No functional changes intended

Change-Id: Ie89ac6efe2f5af0b4cbe5a259a18770b8d2de859
dtv.comp at

#21814 (Apr 29, 2026, 8:38:08 PM)

trx: add JSON stats export for WebSDR API

Introduce stats_json.c providing JSON serialization for:
- stats and counters
- rate counters
- BTS state
- TRX/transceiver state
- WebSDR runtime metrics

Add osmobts_get_stats() API to expose these via WebSDR
interface and export it in Emscripten build

This enables programmatic access to data previously available
via VTY (e.g. "show stats", "show bts")

Change-Id: Ifb82adfab879a65ecd222c45e06551983aa90a0f
dtv.comp at

#21813 (Apr 29, 2026, 8:37:50 PM)

abis: add helper to update BTS identity

Introduce abis_update_bts_info() to update site_id and bts_id in
bts_dev_info at runtime

This allows adjusting BTS identity after initialization,
e.g. from external control interfaces

Change-Id: Ibafd66a1e1dc42ad0063c412087bee10d212fe33
dtv.comp at

#21812 (Apr 29, 2026, 8:37:49 PM)

build: add WebSDR configure option and Emscripten detection

Detect Emscripten toolchain and introduce --with-websdr
configure option

When enabled, check for libosmo-trx-websdr and required
symbol modulateBits, failing configure if missing

Change-Id: Iff4b76e339e2873686c8c15885dd498458ceb546
dtv.comp at

#21811 (Apr 29, 2026, 8:37:48 PM)

trx: split TRX ctrl response parsing from socket callback

Extract TRX control response parsing logic into
trx_ctrl_parse_rsp() and call it from trx_ctrl_read_cb()

This decouples parsing from socket I/O and allows reuse
with alternative transports

No functional changes intended

Change-Id: I255c7d554aad3ac6df2c66716fae1c1fb512110e
dtv.comp at

#21810 (Apr 29, 2026, 8:37:47 PM)

smux: allow lchan lookup without remote address

Make rem_addr optional in osmux_lchan_find() by skipping
address comparison when it is NULL

This allows callers without socket-based addressing to
locate lchans by CID only (e.g. callback-based transports)

Change-Id: I7a275dad2353241c7b04cdb5d6cc1436a175c1f3
dtv.comp at

#21809 (Apr 29, 2026, 8:37:38 PM)

trx, bts: add optional WebSDR backend (callback-based transport)

Introduce WebSDR backend enabled via ENABLE_WEBSDR,
adding an alternative callback-based transport alongside
existing socket-based TRX/OSMUX I/O

Implement:
- TRX control via osmotrxlib_process_command()
- TRXD data via apitrx_tx_call()/trx_data_read()
- clock handling via apibts_clock_ind() and external timers
- Osmux integration via ws_osmux_* helpers

Adapt scheduler to support API-based burst submission and
external timer callbacks in WebSDR mode

Disable signal handling, stats and socket I/O when building
with ENABLE_WEBSDR

Add WebSDR API entrypoint, Emscripten build target and
example configuration

Enables running BTS/TRX stack in WebAssembly environments

Change-Id: Idebd588f33afd85021813ad5821391781db683a9
dtv.comp at

#21808 (Apr 29, 2026, 8:37:10 PM)

trx: factor out TRX ctrl message submission

Extract TRX control message sending logic into
trx_ctrl_submit_msg() and reuse it from trx_ctrl_send()

This separates message construction from transport-specific
submission and prepares for alternative backends

No functional changes intended

Change-Id: Ibbd50117db4531efbc374e43e3802f9f995362cd
dtv.comp at

#21807 (Apr 29, 2026, 8:37:10 PM)

trx: factor out clock indication handling into helper

Extract clock indication handling logic into trx_clk_phy()
and reuse it from trx_clk_read_cb()

This separates core FN processing from socket-specific code
and prepares for alternative clock sources (e.g. non-UDP /
in-memory callbacks used in WebSDR/WASM builds).

No functional changes intended

Change-Id: I0e6b3e25da14ada4d0ef86fd4c4e6bbc12e447d2
dtv.comp at

#21806 (Apr 29, 2026, 8:37:03 PM)

bts: guard AMR RTP decoder stub with HAVE_LIBOSMOCODEC_STATIC

Disable dummy osmo_amr_rtp_dec() implementation when
linking against static libosmocodec to avoid symbol
conflicts

Apply to omldummy and virtual BTS models

Change-Id: Ie19ae2013893575a2f74a87af2151034abf57870
dtv.comp at

#21805 (Apr 29, 2026, 8:37:02 PM)

trx: handle synchronous TRX control callbacks in provision FSM

Set *_sent flags before issuing TRX control commands to ensure
correct state when responses are delivered synchronously
(e.g. WebUSB callback path)

Also guard FSM state handling in st_open_poweroff() to avoid
duplicate transitions if state was already changed by a
synchronous response

No functional change for asynchronous (socket-based) backends

Change-Id: I50c95e3796839e9fe721bff6f96fed4c490c6018
dtv.comp at

#21804 (Apr 29, 2026, 8:36:53 PM)

build: make sched_* usage optional

Add configure checks for sched_* APIs and guard usage of
sched_setscheduler with HAVE_SCHED_SETSCHEDULER.

This avoids build/runtime issues on platforms without
scheduler support.

Change-Id: I5af357c1e2074fa1e05ac6bc20af8535c474d906
dtv.comp at

#21803 (Apr 29, 2026, 8:36:50 PM)

trx: factor out FN timer processing into common helper

Extract core FN timer handling logic into trx_fn_timer_process()
to decouple it from timerfd-specific code.

This allows reusing the same scheduling logic for alternative
timer backends (e.g. WebSDR) while keeping timerfd integration
as a thin wrapper.

No functional changes intended.

Change-Id: Ia28cce57afb3dc97c8655e855ebd5ace7e096648
dtv.comp at

#21802 (Apr 29, 2026, 8:36:13 PM)

trx: split TRXD parsing from socket callback

Extract TRXD message parsing into trx_data_read() and
reuse it from trx_data_read_cb()

This decouples parsing from socket I/O and allows reuse
with alternative transports

No functional changes intended

Change-Id: I50ad8b6d2edfd91f2d569cd8badf5c036fbf87ed
dtv.comp at

#21801 (Apr 29, 2026, 8:36:11 PM)

trx: factor out TRXD data submission helper

Extract TRXD data sending into trx_data_submit_msg() and
reuse it from trx_if_send_burst()

This separates transport-specific I/O from message construction
and prepares for alternative backends

No functional changes intended

Change-Id: Ie89ac6efe2f5af0b4cbe5a259a18770b8d2de859
dtv.comp at

#21800 (Apr 29, 2026, 8:36:09 PM)

trx: factor out burst submission into helper

Extract TRXD burst submission logic from bts_sched_flush_buffers()
into trx_sched_submit_bursts()

No functional changes intended, this prepares for alternative
backends reusing the same scheduling logic

Change-Id: I7ce61bee4ca7ca50ef190982f1a0e4ce57c8c838
dtv.comp at

#21799 (Apr 29, 2026, 8:36:09 PM)

trx: add JSON stats export for WebSDR API

Introduce stats_json.c providing JSON serialization for:
- stats and counters
- rate counters
- BTS state
- TRX/transceiver state
- WebSDR runtime metrics

Add osmobts_get_stats() API to expose these via WebSDR
interface and export it in Emscripten build

This enables programmatic access to data previously available
via VTY (e.g. "show stats", "show bts")

Change-Id: Ifb82adfab879a65ecd222c45e06551983aa90a0f
dtv.comp at

#21798 (Apr 29, 2026, 8:36:03 PM)

build: add WebSDR configure option and Emscripten detection

Detect Emscripten toolchain and introduce --with-websdr
configure option

When enabled, check for libosmo-trx-websdr and required
symbol modulateBits, failing configure if missing

Change-Id: Iff4b76e339e2873686c8c15885dd498458ceb546
dtv.comp at

#21797 (Apr 29, 2026, 8:35:48 PM)

abis: add helper to update BTS identity

Introduce abis_update_bts_info() to update site_id and bts_id in
bts_dev_info at runtime

This allows adjusting BTS identity after initialization,
e.g. from external control interfaces

Change-Id: Ibafd66a1e1dc42ad0063c412087bee10d212fe33
dtv.comp at

#21796 (Apr 29, 2026, 8:35:48 PM)

smux: allow lchan lookup without remote address

Make rem_addr optional in osmux_lchan_find() by skipping
address comparison when it is NULL

This allows callers without socket-based addressing to
locate lchans by CID only (e.g. callback-based transports)

Change-Id: I7a275dad2353241c7b04cdb5d6cc1436a175c1f3
dtv.comp at

#21795 (Apr 29, 2026, 8:35:34 PM)

trx: split TRX ctrl response parsing from socket callback

Extract TRX control response parsing logic into
trx_ctrl_parse_rsp() and call it from trx_ctrl_read_cb()

This decouples parsing from socket I/O and allows reuse
with alternative transports

No functional changes intended

Change-Id: I255c7d554aad3ac6df2c66716fae1c1fb512110e
dtv.comp at

#21794 (Apr 29, 2026, 8:35:34 PM)

trx: factor out TRX ctrl message submission

Extract TRX control message sending logic into
trx_ctrl_submit_msg() and reuse it from trx_ctrl_send()

This separates message construction from transport-specific
submission and prepares for alternative backends

No functional changes intended

Change-Id: Ibbd50117db4531efbc374e43e3802f9f995362cd
dtv.comp at

#21793 (Apr 29, 2026, 8:35:23 PM)

trx, bts: add optional WebSDR backend (callback-based transport)

Introduce WebSDR backend enabled via ENABLE_WEBSDR,
adding an alternative callback-based transport alongside
existing socket-based TRX/OSMUX I/O

Implement:
- TRX control via osmotrxlib_process_command()
- TRXD data via apitrx_tx_call()/trx_data_read()
- clock handling via apibts_clock_ind() and external timers
- Osmux integration via ws_osmux_* helpers

Adapt scheduler to support API-based burst submission and
external timer callbacks in WebSDR mode

Disable signal handling, stats and socket I/O when building
with ENABLE_WEBSDR

Add WebSDR API entrypoint, Emscripten build target and
example configuration

Enables running BTS/TRX stack in WebAssembly environments

Change-Id: Idebd588f33afd85021813ad5821391781db683a9
dtv.comp at

#21792 (Apr 29, 2026, 8:33:04 PM)

trx: split TRXD parsing from socket callback

Extract TRXD message parsing into trx_data_read() and
reuse it from trx_data_read_cb()

This decouples parsing from socket I/O and allows reuse
with alternative transports

No functional changes intended

Change-Id: I50ad8b6d2edfd91f2d569cd8badf5c036fbf87ed
dtv.comp at

#21791 (Apr 29, 2026, 8:32:58 PM)

abis: add helper to update BTS identity

Introduce abis_update_bts_info() to update site_id and bts_id in
bts_dev_info at runtime

This allows adjusting BTS identity after initialization,
e.g. from external control interfaces

Change-Id: Ibafd66a1e1dc42ad0063c412087bee10d212fe33
dtv.comp at

#21790 (Apr 29, 2026, 8:32:20 PM)

trx, bts: add optional WebSDR backend (callback-based transport)

Introduce WebSDR backend enabled via ENABLE_WEBSDR,
adding an alternative callback-based transport alongside
existing socket-based TRX/OSMUX I/O

Implement:
- TRX control via osmotrxlib_process_command()
- TRXD data via apitrx_tx_call()/trx_data_read()
- clock handling via apibts_clock_ind() and external timers
- Osmux integration via ws_osmux_* helpers

Adapt scheduler to support API-based burst submission and
external timer callbacks in WebSDR mode

Disable signal handling, stats and socket I/O when building
with ENABLE_WEBSDR

Add WebSDR API entrypoint, Emscripten build target and
example configuration

Enables running BTS/TRX stack in WebAssembly environments

Change-Id: Idebd588f33afd85021813ad5821391781db683a9
dtv.comp at

#21789 (Apr 29, 2026, 8:32:19 PM)

trx: factor out burst submission into helper

Extract TRXD burst submission logic from bts_sched_flush_buffers()
into trx_sched_submit_bursts()

No functional changes intended, this prepares for alternative
backends reusing the same scheduling logic

Change-Id: I7ce61bee4ca7ca50ef190982f1a0e4ce57c8c838
dtv.comp at

#21788 (Apr 29, 2026, 8:32:10 PM)

bts: guard AMR RTP decoder stub with HAVE_LIBOSMOCODEC_STATIC

Disable dummy osmo_amr_rtp_dec() implementation when
linking against static libosmocodec to avoid symbol
conflicts

Apply to omldummy and virtual BTS models

Change-Id: Ie19ae2013893575a2f74a87af2151034abf57870
dtv.comp at

#21787 (Apr 29, 2026, 8:32:06 PM)

build: add WebSDR configure option and Emscripten detection

Detect Emscripten toolchain and introduce --with-websdr
configure option

When enabled, check for libosmo-trx-websdr and required
symbol modulateBits, failing configure if missing

Change-Id: Iff4b76e339e2873686c8c15885dd498458ceb546
dtv.comp at

#21786 (Apr 29, 2026, 8:31:34 PM)

smux: allow lchan lookup without remote address

Make rem_addr optional in osmux_lchan_find() by skipping
address comparison when it is NULL

This allows callers without socket-based addressing to
locate lchans by CID only (e.g. callback-based transports)

Change-Id: I7a275dad2353241c7b04cdb5d6cc1436a175c1f3
dtv.comp at

#21785 (Apr 29, 2026, 8:31:26 PM)

trx: add JSON stats export for WebSDR API

Introduce stats_json.c providing JSON serialization for:
- stats and counters
- rate counters
- BTS state
- TRX/transceiver state
- WebSDR runtime metrics

Add osmobts_get_stats() API to expose these via WebSDR
interface and export it in Emscripten build

This enables programmatic access to data previously available
via VTY (e.g. "show stats", "show bts")

Change-Id: Ifb82adfab879a65ecd222c45e06551983aa90a0f
dtv.comp at

#21784 (Apr 29, 2026, 8:31:08 PM)

build: make sched_* usage optional

Add configure checks for sched_* APIs and guard usage of
sched_setscheduler with HAVE_SCHED_SETSCHEDULER.

This avoids build/runtime issues on platforms without
scheduler support.

Change-Id: I5af357c1e2074fa1e05ac6bc20af8535c474d906
dtv.comp at

#21783 (Apr 29, 2026, 8:31:06 PM)

trx: factor out TRX ctrl message submission

Extract TRX control message sending logic into
trx_ctrl_submit_msg() and reuse it from trx_ctrl_send()

This separates message construction from transport-specific
submission and prepares for alternative backends

No functional changes intended

Change-Id: Ibbd50117db4531efbc374e43e3802f9f995362cd
dtv.comp at

#21782 (Apr 29, 2026, 8:31:04 PM)

trx: split TRX ctrl response parsing from socket callback

Extract TRX control response parsing logic into
trx_ctrl_parse_rsp() and call it from trx_ctrl_read_cb()

This decouples parsing from socket I/O and allows reuse
with alternative transports

No functional changes intended

Change-Id: I255c7d554aad3ac6df2c66716fae1c1fb512110e
dtv.comp at

#21781 (Apr 29, 2026, 8:31:04 PM)

trx: handle synchronous TRX control callbacks in provision FSM

Set *_sent flags before issuing TRX control commands to ensure
correct state when responses are delivered synchronously
(e.g. WebUSB callback path)

Also guard FSM state handling in st_open_poweroff() to avoid
duplicate transitions if state was already changed by a
synchronous response

No functional change for asynchronous (socket-based) backends

Change-Id: I50c95e3796839e9fe721bff6f96fed4c490c6018
dtv.comp at

#21780 (Apr 29, 2026, 8:31:00 PM)

trx: factor out TRXD data submission helper

Extract TRXD data sending into trx_data_submit_msg() and
reuse it from trx_if_send_burst()

This separates transport-specific I/O from message construction
and prepares for alternative backends

No functional changes intended

Change-Id: Ie89ac6efe2f5af0b4cbe5a259a18770b8d2de859
dtv.comp at

#21779 (Apr 29, 2026, 8:30:51 PM)

trx: factor out clock indication handling into helper

Extract clock indication handling logic into trx_clk_phy()
and reuse it from trx_clk_read_cb()

This separates core FN processing from socket-specific code
and prepares for alternative clock sources (e.g. non-UDP /
in-memory callbacks used in WebSDR/WASM builds).

No functional changes intended

Change-Id: I0e6b3e25da14ada4d0ef86fd4c4e6bbc12e447d2
dtv.comp at

#21778 (Apr 29, 2026, 8:30:42 PM)

trx: factor out FN timer processing into common helper

Extract core FN timer handling logic into trx_fn_timer_process()
to decouple it from timerfd-specific code.

This allows reusing the same scheduling logic for alternative
timer backends (e.g. WebSDR) while keeping timerfd integration
as a thin wrapper.

No functional changes intended.

Change-Id: Ia28cce57afb3dc97c8655e855ebd5ace7e096648
dtv.comp at

#21777 (Apr 29, 2026, 8:30:42 PM)

build: remove unused sys/timerfd.h include

The header is not used in scheduler_trx.c and breaks builds on
platforms where timerfd is not available (e.g. Web/emscripten).

Remove the unused include.

Change-Id: Id5a700c865f984e8f99199a1e365bb7f1462030a
dtv.comp at

#21776 (Apr 29, 2026, 8:30:37 PM)

trx: split TRXD parsing from socket callback

Extract TRXD message parsing into trx_data_read() and
reuse it from trx_data_read_cb()

This decouples parsing from socket I/O and allows reuse
with alternative transports

No functional changes intended

Change-Id: I50ad8b6d2edfd91f2d569cd8badf5c036fbf87ed
dtv.comp at

#21775 (Apr 29, 2026, 8:30:35 PM)

trx: factor out TRXD data submission helper

Extract TRXD data sending into trx_data_submit_msg() and
reuse it from trx_if_send_burst()

This separates transport-specific I/O from message construction
and prepares for alternative backends

No functional changes intended

Change-Id: Ie89ac6efe2f5af0b4cbe5a259a18770b8d2de859
dtv.comp at

#21774 (Apr 29, 2026, 8:30:09 PM)

build: make sched_* usage optional

Add configure checks for sched_* APIs and guard usage of
sched_setscheduler with HAVE_SCHED_SETSCHEDULER.

This avoids build/runtime issues on platforms without
scheduler support.

Change-Id: I5af357c1e2074fa1e05ac6bc20af8535c474d906
dtv.comp at

#21773 (Apr 29, 2026, 8:30:03 PM)

trx: split TRX ctrl response parsing from socket callback

Extract TRX control response parsing logic into
trx_ctrl_parse_rsp() and call it from trx_ctrl_read_cb()

This decouples parsing from socket I/O and allows reuse
with alternative transports

No functional changes intended

Change-Id: I255c7d554aad3ac6df2c66716fae1c1fb512110e
dtv.comp at

#21772 (Apr 29, 2026, 8:28:57 PM)

trx: factor out TRX ctrl message submission

Extract TRX control message sending logic into
trx_ctrl_submit_msg() and reuse it from trx_ctrl_send()

This separates message construction from transport-specific
submission and prepares for alternative backends

No functional changes intended

Change-Id: Ibbd50117db4531efbc374e43e3802f9f995362cd
dtv.comp at

#21771 (Apr 29, 2026, 8:28:55 PM)

trx: handle synchronous TRX control callbacks in provision FSM

Set *_sent flags before issuing TRX control commands to ensure
correct state when responses are delivered synchronously
(e.g. WebUSB callback path)

Also guard FSM state handling in st_open_poweroff() to avoid
duplicate transitions if state was already changed by a
synchronous response

No functional change for asynchronous (socket-based) backends

Change-Id: I50c95e3796839e9fe721bff6f96fed4c490c6018
dtv.comp at

#21770 (Apr 29, 2026, 8:28:51 PM)

trx, bts: add optional WebSDR backend (callback-based transport)

Introduce WebSDR backend enabled via ENABLE_WEBSDR,
adding an alternative callback-based transport alongside
existing socket-based TRX/OSMUX I/O

Implement:
- TRX control via osmotrxlib_process_command()
- TRXD data via apitrx_tx_call()/trx_data_read()
- clock handling via apibts_clock_ind() and external timers
- Osmux integration via ws_osmux_* helpers

Adapt scheduler to support API-based burst submission and
external timer callbacks in WebSDR mode

Disable signal handling, stats and socket I/O when building
with ENABLE_WEBSDR

Add WebSDR API entrypoint, Emscripten build target and
example configuration

Enables running BTS/TRX stack in WebAssembly environments

Change-Id: Idebd588f33afd85021813ad5821391781db683a9
dtv.comp at

#21769 (Apr 29, 2026, 8:28:47 PM)

trx: factor out burst submission into helper

Extract TRXD burst submission logic from bts_sched_flush_buffers()
into trx_sched_submit_bursts()

No functional changes intended, this prepares for alternative
backends reusing the same scheduling logic

Change-Id: I7ce61bee4ca7ca50ef190982f1a0e4ce57c8c838
dtv.comp at

#21768 (Apr 29, 2026, 8:28:46 PM)

smux: allow lchan lookup without remote address

Make rem_addr optional in osmux_lchan_find() by skipping
address comparison when it is NULL

This allows callers without socket-based addressing to
locate lchans by CID only (e.g. callback-based transports)

Change-Id: I7a275dad2353241c7b04cdb5d6cc1436a175c1f3
dtv.comp at

#21767 (Apr 29, 2026, 8:28:44 PM)

trx: add JSON stats export for WebSDR API

Introduce stats_json.c providing JSON serialization for:
- stats and counters
- rate counters
- BTS state
- TRX/transceiver state
- WebSDR runtime metrics

Add osmobts_get_stats() API to expose these via WebSDR
interface and export it in Emscripten build

This enables programmatic access to data previously available
via VTY (e.g. "show stats", "show bts")

Change-Id: Ifb82adfab879a65ecd222c45e06551983aa90a0f
dtv.comp at

#21766 (Apr 29, 2026, 8:28:43 PM)

abis: add helper to update BTS identity

Introduce abis_update_bts_info() to update site_id and bts_id in
bts_dev_info at runtime

This allows adjusting BTS identity after initialization,
e.g. from external control interfaces

Change-Id: Ibafd66a1e1dc42ad0063c412087bee10d212fe33
dtv.comp at

#21765 (Apr 29, 2026, 8:28:42 PM)

build: add WebSDR configure option and Emscripten detection

Detect Emscripten toolchain and introduce --with-websdr
configure option

When enabled, check for libosmo-trx-websdr and required
symbol modulateBits, failing configure if missing

Change-Id: Iff4b76e339e2873686c8c15885dd498458ceb546
dtv.comp at

#21764 (Apr 29, 2026, 8:28:41 PM)

bts: guard AMR RTP decoder stub with HAVE_LIBOSMOCODEC_STATIC

Disable dummy osmo_amr_rtp_dec() implementation when
linking against static libosmocodec to avoid symbol
conflicts

Apply to omldummy and virtual BTS models

Change-Id: Ie19ae2013893575a2f74a87af2151034abf57870
dtv.comp at

#21763 (Apr 29, 2026, 8:28:40 PM)

build: remove unused sys/timerfd.h include

The header is not used in scheduler_trx.c and breaks builds on
platforms where timerfd is not available (e.g. Web/emscripten).

Remove the unused include.

Change-Id: Id5a700c865f984e8f99199a1e365bb7f1462030a
dtv.comp at

#21762 (Apr 29, 2026, 8:28:39 PM)

trx: factor out FN timer processing into common helper

Extract core FN timer handling logic into trx_fn_timer_process()
to decouple it from timerfd-specific code.

This allows reusing the same scheduling logic for alternative
timer backends (e.g. WebSDR) while keeping timerfd integration
as a thin wrapper.

No functional changes intended.

Change-Id: Ia28cce57afb3dc97c8655e855ebd5ace7e096648
dtv.comp at

#21761 (Apr 29, 2026, 8:28:38 PM)

trx: factor out clock indication handling into helper

Extract clock indication handling logic into trx_clk_phy()
and reuse it from trx_clk_read_cb()

This separates core FN processing from socket-specific code
and prepares for alternative clock sources (e.g. non-UDP /
in-memory callbacks used in WebSDR/WASM builds).

No functional changes intended

Change-Id: I0e6b3e25da14ada4d0ef86fd4c4e6bbc12e447d2
dtv.comp at

#21760 (Apr 29, 2026, 7:57:04 PM)

convolve: avoid function pointer casts by adding wrapper functions

Introduce _base_convolve_*_void() wrappers matching the expected
function pointer signatures and use them instead of casting
_base_convolve_* functions to (void *).

This removes unsafe function pointer casts and improves
type safety, which is required for stricter toolchains and
non-native targets (e.g. WebAssembly)

Change-Id: Idecb118be285eb3e4691d1761d0d8fa24fd80c75
dtv.comp at

#21759 (Apr 29, 2026, 7:57:03 PM)

trx: add JSON serialization for 'show trx'

Introduce trx_to_json() helper to serialize the output of
'show trx' into JSON format.

Also initialize talloc/VTY context in websdr entrypoint to
allow accessing TRX configuration programmatically.

Intended for external consumers (e.g. WebSDR frontend).

Change-Id: Icbfb754580daa6db9b5646cc6698a6a6ee1c1610
dtv.comp at

#21758 (Apr 29, 2026, 7:57:03 PM)

device: add WebSDR radio backend

Introduce a new optional WebSDR device backend, enabled via
--with-websdr.

Add WebSDRDevice implementation and build integration, providing
a RadioDevice interface backed by callback hooks for control and
sample I/O.

Intended for Web-based deployments where osmo-trx interacts with
SDR hardware via a WebSDR/WebUSB frontend.

Change-Id: Ie459cbd70388dd8ff5b89221d30770bab0bd9014
dtv.comp at

#21757 (Apr 29, 2026, 7:57:03 PM)

build: detect pthread_setname_np and sched_* APIs, guard usage

Add configure checks for pthread_setname_np and sched_* functions.
Wrap their usage with HAVE_* guards to avoid build failures on
platforms where they are unavailable.

Return -ENOTSUP for unsupported scheduler operations.

Improves portability across non-Linux and restricted environments
(e.g. WebAssembly).

Change-Id: Ic3f1492544439d88c5e6683330c6696de1c2f85b
dtv.comp at

#21756 (Apr 29, 2026, 7:57:00 PM)

transceiver: add optional WebSDR device support

- Add support for WebSDR devices enabled via the --with-websdr
configure flag.
- add libosmo-trx-websdr library and pkg-config file
- update .gitignore for wasm and pkg-config artifacts

Change-Id: Ia0d340c323c2eea28fbe82601ba0af7cfbd68f6d
dtv.comp at

#21755 (Apr 29, 2026, 7:56:59 PM)

convolve: avoid function pointer casts by adding wrapper functions

Introduce _base_convolve_*_void() wrappers matching the expected
function pointer signatures and use them instead of casting
_base_convolve_* functions to (void *).

This removes unsafe function pointer casts and improves
type safety, which is required for stricter toolchains and
non-native targets (e.g. WebAssembly)

Change-Id: Idecb118be285eb3e4691d1761d0d8fa24fd80c75
dtv.comp at

#21754 (Apr 29, 2026, 7:56:58 PM)

trx: add JSON serialization for 'show trx'

Introduce trx_to_json() helper to serialize the output of
'show trx' into JSON format.

Also initialize talloc/VTY context in websdr entrypoint to
allow accessing TRX configuration programmatically.

Intended for external consumers (e.g. WebSDR frontend).

Change-Id: Icbfb754580daa6db9b5646cc6698a6a6ee1c1610
dtv.comp at

#21753 (Apr 29, 2026, 7:56:58 PM)

device: add WebSDR radio backend

Introduce a new optional WebSDR device backend, enabled via
--with-websdr.

Add WebSDRDevice implementation and build integration, providing
a RadioDevice interface backed by callback hooks for control and
sample I/O.

Intended for Web-based deployments where osmo-trx interacts with
SDR hardware via a WebSDR/WebUSB frontend.

Change-Id: Ie459cbd70388dd8ff5b89221d30770bab0bd9014
dtv.comp at

#21752 (Apr 29, 2026, 7:56:57 PM)

build: detect pthread_setname_np and sched_* APIs, guard usage

Add configure checks for pthread_setname_np and sched_* functions.
Wrap their usage with HAVE_* guards to avoid build failures on
platforms where they are unavailable.

Return -ENOTSUP for unsupported scheduler operations.

Improves portability across non-Linux and restricted environments
(e.g. WebAssembly).

Change-Id: Ic3f1492544439d88c5e6683330c6696de1c2f85b
dtv.comp at

#21751 (Apr 29, 2026, 7:56:57 PM)

transceiver: add optional WebSDR device support

- Add support for WebSDR devices enabled via the --with-websdr
configure flag.
- add libosmo-trx-websdr library and pkg-config file
- update .gitignore for wasm and pkg-config artifacts

Change-Id: Ia0d340c323c2eea28fbe82601ba0af7cfbd68f6d
dtv.comp at

#21750 (Apr 29, 2026, 5:53:54 PM)

nokia: make Rx diversity configurable

The config structure sent to the BTS with BTS_CONF_DATA includes
an IE that enables or disables Rx diversity.  In the original code
this setting was hard-coded to enabled state; make it configurable
via vty.

Change-Id: I73bd91b717a8c8b338bacb6ed9db73bb07245c12
falcon at

#21749 (Apr 29, 2026, 5:53:44 PM)

nokia bts-reset-timer: raise the maximum to 300 s

The previous vty tuning range for this timer (allowing up to 100 s)
is not sufficient for Flexi Multiradio BTS, where we need 120 s
minimum or 130 s for some margin.  Raise the upper limit for vty
config of this parameter to 5 min, which should be long enough
to not require further revisiting.

Change-Id: Ie5b784c9cce56e27800084471a7fb0b867cc0c69
falcon at

#21748 (Apr 29, 2026, 5:53:43 PM)

nokia: respond to BTS_COMMISS_TEST_REQ

In some cases, Flexi Multiradio BTS sends us BTS_COMMISS_TEST_REQ
during its init process, and expects us to respond with
BTS_COMMISS_TEST_COMPL, indicating that we did the requested
commissioning tests.  While we don't do any actual tests currently,
and we have not yet reached an understanding of the exact conditions
as to when the BTS makes this query of us, if it does send us
BTS_COMMISS_TEST_REQ, we need to respond with BTS_COMMISS_TEST_COMPL
to make it happy.

Change-Id: I0f2710c3cdb38a9e5b37e40ca5584237a730a902
falcon at

#21747 (Apr 29, 2026, 5:53:42 PM)

nokia vty: change help strings away from "*Site"

Support for Nokia BTS in OsmoBSC is being expanded from just *Site
family to also include Flexi Multiradio - therefore, help strings
and error messages in vty should be changed accordingly.

FIXME: names of Nokia-specific vty settings still begin with
nokia_site, ditto for the name of the BTS model.  TODO: decide
on a proper long-term solution.

Change-Id: I55556b7b5aa5bc6efcbee815e9011497a933697c
falcon at

#21746 (Apr 29, 2026, 5:51:56 PM)

nokia skip-reset: make consistent with other vty settings

All other Nokia-specific vty settings use is_nokia_bts() helper
function, while the code for skip-reset directly compares
bts->type against GSM_BTS_TYPE_NOKIA_SITE.  Change to use the
helper function: it is consistent with other vty settings,
and avoids one more place that erroneously refers to *Site
instead of all Nokia BTS.

Change-Id: Ie8cdac51f82185e2d4f37a8da00acba633670052
falcon at

#21745 (Apr 29, 2026, 5:51:55 PM)

nokia: add support for Flexi Multiradio

Previous support existed for Nokia MetroSite, UltraSite and InSite
models, resulting in BTS model name "nokia_site".  However, there
exist newer Nokia BTS models that also support E1 Abis and can be
supported by OsmoBSC with relatively small changes: Flexi EDGE,
Flexi Multiradio and Flexi Multiradio 10.  Out of these newer
models, American 2G Cooperative (the present patch author's current
organization) has only Flexi MR at the present time - hence this
model shall be the first "new" Nokia BTS to be supported.

The first change required in order to support Flexi MR is ability
to receive long OML messages that have been segmented by the BTS:
the new BTS sends a much longer BTS_CONF_REQ message, and we have
to handle it correctly.

Change-Id: Icd429552c3b5e90d6c5d3ae5f52afd6550e3cebc
falcon at

#21744 (Apr 29, 2026, 5:51:55 PM)

rsl: don't send legacy Chan Ident IE for Nokia BTS

The description of CHAN ACTIV command message in TS 48.058
section 8.4.1 lists Channel Identification as an optional IE,
with a note that reads "Included if compatibility with phase1
is required."  This note may have been misinterpreted as
referring to compatibility with Phase 1 phones - but since
this network-internal Abis detail is invisible to phones,
the real intent of GSM spec authors here must have been
compatibility with Phase 1 BTS.

Previous versions of OsmoBSC would always include this IE,
and it appears that all previously supported BTS models
would simply ignore it.  However, newer Nokia BTS models
(observed on Flexi Multiradio at least) dislike this IE
and return CHAN ACTIV NACK with an optional IE error cause
if it is included.

To avoid changing OsmoBSC behavior for other users, let us
conditionalize removal of this legacy IE on Nokia BTS for now.
This change has been tested on InSite, MetroSite and Flexi
Multiradio - no adverse effects on previously supported
*Site models.

Change-Id: Ibce7a841907ac87ae378ded3ddb174d38b70b7b7
falcon at

#21743 (Apr 29, 2026, 5:51:55 PM)

nokia: make Rx diversity configurable

The config structure sent to the BTS with BTS_CONF_DATA includes
an IE that enables or disables Rx diversity.  In the original code
this setting was hard-coded to enabled state; make it configurable
via vty.

Change-Id: I73bd91b717a8c8b338bacb6ed9db73bb07245c12
falcon at

#21742 (Apr 29, 2026, 5:51:55 PM)

nokia bts-reset-timer: raise the maximum to 300 s

The previous vty tuning range for this timer (allowing up to 100 s)
is not sufficient for Flexi Multiradio BTS, where we need 120 s
minimum or 130 s for some margin.  Raise the upper limit for vty
config of this parameter to 5 min, which should be long enough
to not require further revisiting.

Change-Id: Ie5b784c9cce56e27800084471a7fb0b867cc0c69
falcon at

#21741 (Apr 29, 2026, 5:51:55 PM)

nokia: respond to BTS_COMMISS_TEST_REQ

In some cases, Flexi Multiradio BTS sends us BTS_COMMISS_TEST_REQ
during its init process, and expects us to respond with
BTS_COMMISS_TEST_COMPL, indicating that we did the requested
commissioning tests.  While we don't do any actual tests currently,
and we have not yet reached an understanding of the exact conditions
as to when the BTS makes this query of us, if it does send us
BTS_COMMISS_TEST_REQ, we need to respond with BTS_COMMISS_TEST_COMPL
to make it happy.

Change-Id: I0f2710c3cdb38a9e5b37e40ca5584237a730a902
falcon at

#21740 (Apr 29, 2026, 5:51:54 PM)

rsl: don't send legacy Chan Ident IE for Nokia BTS

The description of CHAN ACTIV command message in TS 48.058
section 8.4.1 lists Channel Identification as an optional IE,
with a note that reads "Included if compatibility with phase1
is required."  This note may have been misinterpreted as
referring to compatibility with Phase 1 phones - but since
this network-internal Abis detail is invisible to phones,
the real intent of GSM spec authors here must have been
compatibility with Phase 1 BTS.

Previous versions of OsmoBSC would always include this IE,
and it appears that all previously supported BTS models
would simply ignore it.  However, newer Nokia BTS models
(observed on Flexi Multiradio at least) dislike this IE
and return CHAN ACTIV NACK with an optional IE error cause
if it is included.

To avoid changing OsmoBSC behavior for other users, let us
conditionalize removal of this legacy IE on Nokia BTS for now.
This change has been tested on InSite, MetroSite and Flexi
Multiradio - no adverse effects on previously supported
*Site models.

Change-Id: Ibce7a841907ac87ae378ded3ddb174d38b70b7b7
falcon at

#21739 (Apr 29, 2026, 5:51:54 PM)

nokia skip-reset: make consistent with other vty settings

All other Nokia-specific vty settings use is_nokia_bts() helper
function, while the code for skip-reset directly compares
bts->type against GSM_BTS_TYPE_NOKIA_SITE.  Change to use the
helper function: it is consistent with other vty settings,
and avoids one more place that erroneously refers to *Site
instead of all Nokia BTS.

Change-Id: Ie8cdac51f82185e2d4f37a8da00acba633670052
falcon at

#21738 (Apr 29, 2026, 5:51:54 PM)

nokia vty: change help strings away from "*Site"

Support for Nokia BTS in OsmoBSC is being expanded from just *Site
family to also include Flexi Multiradio - therefore, help strings
and error messages in vty should be changed accordingly.

FIXME: names of Nokia-specific vty settings still begin with
nokia_site, ditto for the name of the BTS model.  TODO: decide
on a proper long-term solution.

Change-Id: I55556b7b5aa5bc6efcbee815e9011497a933697c
falcon at

#21737 (Apr 29, 2026, 5:51:54 PM)

nokia: add support for Flexi Multiradio

Previous support existed for Nokia MetroSite, UltraSite and InSite
models, resulting in BTS model name "nokia_site".  However, there
exist newer Nokia BTS models that also support E1 Abis and can be
supported by OsmoBSC with relatively small changes: Flexi EDGE,
Flexi Multiradio and Flexi Multiradio 10.  Out of these newer
models, American 2G Cooperative (the present patch author's current
organization) has only Flexi MR at the present time - hence this
model shall be the first "new" Nokia BTS to be supported.

The first change required in order to support Flexi MR is ability
to receive long OML messages that have been segmented by the BTS:
the new BTS sends a much longer BTS_CONF_REQ message, and we have
to handle it correctly.

Change-Id: Icd429552c3b5e90d6c5d3ae5f52afd6550e3cebc
falcon at

#21736 (Apr 29, 2026, 7:12:55 AM)

Cosmetic: bts_nokia_site: fix comment formatting

Ensure each line of a multiline comment starts with " * ".

Related: https://gerrit.osmocom.org/c/osmo-bsc/+/42712/comment/6aa80188_f56f2265/
Change-Id: I83ed16ec09fb66076dc2ba6a49ef272657b09407
Oliver Smith at

#21735 (Apr 29, 2026, 7:12:54 AM)

Cosmetic: bts_nokia_site: fix comment formatting

Ensure each line of a multiline comment starts with " * ".

Related: https://gerrit.osmocom.org/c/osmo-bsc/+/42712/comment/6aa80188_f56f2265/
Change-Id: I83ed16ec09fb66076dc2ba6a49ef272657b09407
Oliver Smith at

#21734 (Apr 28, 2026, 11:51:33 PM)

nokia: respond to BTS_COMMISS_TEST_REQ

In some cases, Flexi Multiradio BTS sends us BTS_COMMISS_TEST_REQ
during its init process, and expects us to respond with
BTS_COMMISS_TEST_COMPL, indicating that we did the requested
commissioning tests.  While we don't do any actual tests currently,
and we have not yet reached an understanding of the exact conditions
as to when the BTS makes this query of us, if it does send us
BTS_COMMISS_TEST_REQ, we need to respond with BTS_COMMISS_TEST_COMPL
to make it happy.

Change-Id: I0f2710c3cdb38a9e5b37e40ca5584237a730a902
falcon at

#21733 (Apr 28, 2026, 11:51:26 PM)

nokia: make Rx diversity configurable

The config structure sent to the BTS with BTS_CONF_DATA includes
an IE that enables or disables Rx diversity.  In the original code
this setting was hard-coded to enabled state; make it configurable
via vty.

Change-Id: I73bd91b717a8c8b338bacb6ed9db73bb07245c12
falcon at

#21732 (Apr 28, 2026, 11:49:30 PM)

nokia bts-reset-timer: raise the maximum to 300 s

The previous vty tuning range for this timer (allowing up to 100 s)
is not sufficient for Flexi Multiradio BTS, where we need 120 s
minimum or 130 s for some margin.  Raise the upper limit for vty
config of this parameter to 5 min, which should be long enough
to not require further revisiting.

Change-Id: Ie5b784c9cce56e27800084471a7fb0b867cc0c69
falcon at

#21731 (Apr 28, 2026, 11:49:30 PM)

rsl: don't send legacy Chan Ident IE for Nokia BTS

The description of CHAN ACTIV command message in TS 48.058
section 8.4.1 lists Channel Identification as an optional IE,
with a note that reads "Included if compatibility with phase1
is required."  This note may have been misinterpreted as
referring to compatibility with Phase 1 phones - but since
this network-internal Abis detail is invisible to phones,
the real intent of GSM spec authors here must have been
compatibility with Phase 1 BTS.

Previous versions of OsmoBSC would always include this IE,
and it appears that all previously supported BTS models
would simply ignore it.  However, newer Nokia BTS models
(observed on Flexi Multiradio at least) dislike this IE
and return CHAN ACTIV NACK with an optional IE error cause
if it is included.

To avoid changing OsmoBSC behavior for other users, let us
conditionalize removal of this legacy IE on Nokia BTS for now.
This change has been tested on InSite, MetroSite and Flexi
Multiradio - no adverse effects on previously supported
*Site models.

Change-Id: Ibce7a841907ac87ae378ded3ddb174d38b70b7b7
falcon at

#21730 (Apr 28, 2026, 11:49:30 PM)

nokia skip-reset: make consistent with other vty settings

All other Nokia-specific vty settings use is_nokia_bts() helper
function, while the code for skip-reset directly compares
bts->type against GSM_BTS_TYPE_NOKIA_SITE.  Change to use the
helper function: it is consistent with other vty settings,
and avoids one more place that erroneously refers to *Site
instead of all Nokia BTS.

Change-Id: Ie8cdac51f82185e2d4f37a8da00acba633670052
falcon at

#21729 (Apr 28, 2026, 11:49:29 PM)

nokia vty: change help strings away from "*Site"

Support for Nokia BTS in OsmoBSC is being expanded from just *Site
family to also include Flexi Multiradio - therefore, help strings
and error messages in vty should be changed accordingly.

FIXME: names of Nokia-specific vty settings still begin with
nokia_site, ditto for the name of the BTS model.  TODO: decide
on a proper long-term solution.

Change-Id: I55556b7b5aa5bc6efcbee815e9011497a933697c
falcon at

#21728 (Apr 28, 2026, 11:49:29 PM)

nokia: add support for Flexi Multiradio

Previous support existed for Nokia MetroSite, UltraSite and InSite
models, resulting in BTS model name "nokia_site".  However, there
exist newer Nokia BTS models that also support E1 Abis and can be
supported by OsmoBSC with relatively small changes: Flexi EDGE,
Flexi Multiradio and Flexi Multiradio 10.  Out of these newer
models, American 2G Cooperative (the present patch author's current
organization) has only Flexi MR at the present time - hence this
model shall be the first "new" Nokia BTS to be supported.

The first change required in order to support Flexi MR is ability
to receive long OML messages that have been segmented by the BTS:
the new BTS sends a much longer BTS_CONF_REQ message, and we have
to handle it correctly.

Change-Id: Icd429552c3b5e90d6c5d3ae5f52afd6550e3cebc
falcon at

#21727 (Apr 28, 2026, 11:49:29 PM)

nokia: make Rx diversity configurable

The config structure sent to the BTS with BTS_CONF_DATA includes
an IE that enables or disables Rx diversity.  In the original code
this setting was hard-coded to enabled state; make it configurable
via vty.

Change-Id: I73bd91b717a8c8b338bacb6ed9db73bb07245c12
falcon at

#21726 (Apr 28, 2026, 11:49:29 PM)

nokia: respond to BTS_COMMISS_TEST_REQ

In some cases, Flexi Multiradio BTS sends us BTS_COMMISS_TEST_REQ
during its init process, and expects us to respond with
BTS_COMMISS_TEST_COMPL, indicating that we did the requested
commissioning tests.  While we don't do any actual tests currently,
and we have not yet reached an understanding of the exact conditions
as to when the BTS makes this query of us, if it does send us
BTS_COMMISS_TEST_REQ, we need to respond with BTS_COMMISS_TEST_COMPL
to make it happy.

Change-Id: I0f2710c3cdb38a9e5b37e40ca5584237a730a902
falcon at

#21725 (Apr 28, 2026, 11:49:28 PM)

nokia bts-reset-timer: raise the maximum to 300 s

The previous vty tuning range for this timer (allowing up to 100 s)
is not sufficient for Flexi Multiradio BTS, where we need 120 s
minimum or 130 s for some margin.  Raise the upper limit for vty
config of this parameter to 5 min, which should be long enough
to not require further revisiting.

Change-Id: Ie5b784c9cce56e27800084471a7fb0b867cc0c69
falcon at

#21724 (Apr 28, 2026, 11:49:28 PM)

nokia skip-reset: make consistent with other vty settings

All other Nokia-specific vty settings use is_nokia_bts() helper
function, while the code for skip-reset directly compares
bts->type against GSM_BTS_TYPE_NOKIA_SITE.  Change to use the
helper function: it is consistent with other vty settings,
and avoids one more place that erroneously refers to *Site
instead of all Nokia BTS.

Change-Id: Ie8cdac51f82185e2d4f37a8da00acba633670052
falcon at

#21723 (Apr 28, 2026, 11:49:28 PM)

rsl: don't send legacy Chan Ident IE for Nokia BTS

The description of CHAN ACTIV command message in TS 48.058
section 8.4.1 lists Channel Identification as an optional IE,
with a note that reads "Included if compatibility with phase1
is required."  This note may have been misinterpreted as
referring to compatibility with Phase 1 phones - but since
this network-internal Abis detail is invisible to phones,
the real intent of GSM spec authors here must have been
compatibility with Phase 1 BTS.

Previous versions of OsmoBSC would always include this IE,
and it appears that all previously supported BTS models
would simply ignore it.  However, newer Nokia BTS models
(observed on Flexi Multiradio at least) dislike this IE
and return CHAN ACTIV NACK with an optional IE error cause
if it is included.

To avoid changing OsmoBSC behavior for other users, let us
conditionalize removal of this legacy IE on Nokia BTS for now.
This change has been tested on InSite, MetroSite and Flexi
Multiradio - no adverse effects on previously supported
*Site models.

Change-Id: Ibce7a841907ac87ae378ded3ddb174d38b70b7b7
falcon at

#21722 (Apr 28, 2026, 11:49:28 PM)

nokia: add support for Flexi Multiradio

Previous support existed for Nokia MetroSite, UltraSite and InSite
models, resulting in BTS model name "nokia_site".  However, there
exist newer Nokia BTS models that also support E1 Abis and can be
supported by OsmoBSC with relatively small changes: Flexi EDGE,
Flexi Multiradio and Flexi Multiradio 10.  Out of these newer
models, American 2G Cooperative (the present patch author's current
organization) has only Flexi MR at the present time - hence this
model shall be the first "new" Nokia BTS to be supported.

The first change required in order to support Flexi MR is ability
to receive long OML messages that have been segmented by the BTS:
the new BTS sends a much longer BTS_CONF_REQ message, and we have
to handle it correctly.

Change-Id: Icd429552c3b5e90d6c5d3ae5f52afd6550e3cebc
falcon at

#21721 (Apr 28, 2026, 11:49:27 PM)

nokia vty: change help strings away from "*Site"

Support for Nokia BTS in OsmoBSC is being expanded from just *Site
family to also include Flexi Multiradio - therefore, help strings
and error messages in vty should be changed accordingly.

FIXME: names of Nokia-specific vty settings still begin with
nokia_site, ditto for the name of the BTS model.  TODO: decide
on a proper long-term solution.

Change-Id: I55556b7b5aa5bc6efcbee815e9011497a933697c
falcon at

#21720 (Apr 28, 2026, 5:43:55 PM)

rsl: don't send legacy Chan Ident IE for Nokia BTS

The description of CHAN ACTIV command message in TS 48.058
section 8.4.1 lists Channel Identification as an optional IE,
with a note that reads "Included if compatibility with phase1
is required."  This note may have been misinterpreted as
referring to compatibility with Phase 1 phones - but since
this network-internal Abis detail is invisible to phones,
the real intent of GSM spec authors here must have been
compatibility with Phase 1 BTS.

Previous versions of OsmoBSC would always include this IE,
and it appears that all previously supported BTS models
would simply ignore it.  However, newer Nokia BTS models
(observed on Flexi Multiradio at least) dislike this IE
and return CHAN ACTIV NACK with an optional IE error cause
if it is included.

To avoid changing OsmoBSC behavior for other users, let us
conditionalize removal of this legacy IE on Nokia BTS for now.
This change has been tested on InSite, MetroSite and Flexi
Multiradio - no adverse effects on previously supported
*Site models.

Change-Id: Ibce7a841907ac87ae378ded3ddb174d38b70b7b7
falcon at

#21719 (Apr 28, 2026, 5:43:03 PM)

nokia: add support for Flexi Multiradio

Previous support existed for Nokia MetroSite, UltraSite and InSite
models, resulting in BTS model name "nokia_site".  However, there
exist newer Nokia BTS models that also support E1 Abis and can be
supported by OsmoBSC with relatively small changes: Flexi EDGE,
Flexi Multiradio and Flexi Multiradio 10.  Out of these newer
models, American 2G Cooperative (the present patch author's current
organization) has only Flexi MR at the present time - hence this
model shall be the first "new" Nokia BTS to be supported.

The first change required in order to support Flexi MR is ability
to receive long OML messages that have been segmented by the BTS:
the new BTS sends a much longer BTS_CONF_REQ message, and we have
to handle it correctly.

Change-Id: Icd429552c3b5e90d6c5d3ae5f52afd6550e3cebc
falcon at

#21718 (Apr 28, 2026, 5:42:16 PM)

nokia: make Rx diversity configurable

The config structure sent to the BTS with BTS_CONF_DATA includes
an IE that enables or disables Rx diversity.  In the original code
this setting was hard-coded to enabled state; make it configurable
via vty.

Change-Id: I73bd91b717a8c8b338bacb6ed9db73bb07245c12
falcon at

#21717 (Apr 28, 2026, 5:42:16 PM)

nokia vty: change help strings away from "*Site"

Support for Nokia BTS in OsmoBSC is being expanded from just *Site
family to also include Flexi Multiradio - therefore, help strings
and error messages in vty should be changed accordingly.

Change-Id: I55556b7b5aa5bc6efcbee815e9011497a933697c
falcon at

#21716 (Apr 28, 2026, 5:42:12 PM)

nokia bts-reset-timer: raise the maximum to 300 s

The previous vty tuning range for this timer (allowing up to 100 s)
is not sufficient for Flexi Multiradio BTS, where we need 120 s
minimum or 130 s for some margin.  Raise the upper limit for vty
config of this parameter to 5 min, which should be long enough
to not require further revisiting.

Change-Id: Ie5b784c9cce56e27800084471a7fb0b867cc0c69
falcon at

#21715 (Apr 28, 2026, 5:42:09 PM)

nokia: respond to BTS_COMMISS_TEST_REQ

In some cases, Flexi Multiradio BTS sends us BTS_COMMISS_TEST_REQ
during its init process, and expects us to respond with
BTS_COMMISS_TEST_COMPL, indicating that we did the requested
commissioning tests.  While we don't do any actual tests currently,
and we have not yet reached an understanding of the exact conditions
as to when the BTS makes this query of us, if it does send us
BTS_COMMISS_TEST_REQ, we need to respond with BTS_COMMISS_TEST_COMPL
to make it happy.

Change-Id: I0f2710c3cdb38a9e5b37e40ca5584237a730a902
falcon at

#21714 (Apr 28, 2026, 5:42:08 PM)

nokia bts-reset-timer: raise the maximum to 300 s

The previous vty tuning range for this timer (allowing up to 100 s)
is not sufficient for Flexi Multiradio BTS, where we need 120 s
minimum or 130 s for some margin.  Raise the upper limit for vty
config of this parameter to 5 min, which should be long enough
to not require further revisiting.

Change-Id: Ie5b784c9cce56e27800084471a7fb0b867cc0c69
falcon at

#21713 (Apr 28, 2026, 5:42:08 PM)

nokia vty: change help strings away from "*Site"

Support for Nokia BTS in OsmoBSC is being expanded from just *Site
family to also include Flexi Multiradio - therefore, help strings
and error messages in vty should be changed accordingly.

Change-Id: I55556b7b5aa5bc6efcbee815e9011497a933697c
falcon at

#21712 (Apr 28, 2026, 5:42:08 PM)

rsl: don't send legacy Chan Ident IE for Nokia BTS

The description of CHAN ACTIV command message in TS 48.058
section 8.4.1 lists Channel Identification as an optional IE,
with a note that reads "Included if compatibility with phase1
is required."  This note may have been misinterpreted as
referring to compatibility with Phase 1 phones - but since
this network-internal Abis detail is invisible to phones,
the real intent of GSM spec authors here must have been
compatibility with Phase 1 BTS.

Previous versions of OsmoBSC would always include this IE,
and it appears that all previously supported BTS models
would simply ignore it.  However, newer Nokia BTS models
(observed on Flexi Multiradio at least) dislike this IE
and return CHAN ACTIV NACK with an optional IE error cause
if it is included.

To avoid changing OsmoBSC behavior for other users, let us
conditionalize removal of this legacy IE on Nokia BTS for now.
This change has been tested on InSite, MetroSite and Flexi
Multiradio - no adverse effects on previously supported
*Site models.

Change-Id: Ibce7a841907ac87ae378ded3ddb174d38b70b7b7
falcon at

#21711 (Apr 28, 2026, 5:42:08 PM)

nokia: add support for Flexi Multiradio

Previous support existed for Nokia MetroSite, UltraSite and InSite
models, resulting in BTS model name "nokia_site".  However, there
exist newer Nokia BTS models that also support E1 Abis and can be
supported by OsmoBSC with relatively small changes: Flexi EDGE,
Flexi Multiradio and Flexi Multiradio 10.  Out of these newer
models, American 2G Cooperative (the present patch author's current
organization) has only Flexi MR at the present time - hence this
model shall be the first "new" Nokia BTS to be supported.

The first change required in order to support Flexi MR is ability
to receive long OML messages that have been segmented by the BTS:
the new BTS sends a much longer BTS_CONF_REQ message, and we have
to handle it correctly.

Change-Id: Icd429552c3b5e90d6c5d3ae5f52afd6550e3cebc
falcon at

#21710 (Apr 28, 2026, 5:42:07 PM)

nokia: make Rx diversity configurable

The config structure sent to the BTS with BTS_CONF_DATA includes
an IE that enables or disables Rx diversity.  In the original code
this setting was hard-coded to enabled state; make it configurable
via vty.

Change-Id: I73bd91b717a8c8b338bacb6ed9db73bb07245c12
falcon at

#21709 (Apr 28, 2026, 5:42:07 PM)

nokia: respond to BTS_COMMISS_TEST_REQ

In some cases, Flexi Multiradio BTS sends us BTS_COMMISS_TEST_REQ
during its init process, and expects us to respond with
BTS_COMMISS_TEST_COMPL, indicating that we did the requested
commissioning tests.  While we don't do any actual tests currently,
and we have not yet reached an understanding of the exact conditions
as to when the BTS makes this query of us, if it does send us
BTS_COMMISS_TEST_REQ, we need to respond with BTS_COMMISS_TEST_COMPL
to make it happy.

Change-Id: I0f2710c3cdb38a9e5b37e40ca5584237a730a902
falcon at

#21708 (Apr 28, 2026, 3:47:29 PM)

transceiver: add optional Laurent burst LUT modulation (int16)

Introduce an optional Burst LUT optimization for Laurent-based burst
modulation, enabled via --with-burst-lut.

- Add precomputed Laurent LUT tables (float and int16 I/Q variants)
- Generate LUT at initialization (prepareBurstLUT)
- Use LUT-based modulation for sps=4 when enabled
- Add configure.ac option and USE_BURST_LUT define

This reduces runtime computation by replacing per-burst Laurent
processing with memcpy-based LUT lookups.

Change-Id: I1715c2d33dc55fe1c7be5c6e7259d378ea5e80b2
dtv.comp at

#21707 (Apr 28, 2026, 3:47:28 PM)

transceiver: add optional Laurent burst LUT modulation (int16)

Introduce an optional Burst LUT optimization for Laurent-based burst
modulation, enabled via --with-burst-lut.

- Add precomputed Laurent LUT tables (float and int16 I/Q variants)
- Generate LUT at initialization (prepareBurstLUT)
- Use LUT-based modulation for sps=4 when enabled
- Add configure.ac option and USE_BURST_LUT define

This reduces runtime computation by replacing per-burst Laurent
processing with memcpy-based LUT lookups.

Change-Id: I1715c2d33dc55fe1c7be5c6e7259d378ea5e80b2
dtv.comp at

#21706 (Apr 27, 2026, 9:42:15 PM)

trx, bts: add optional WebSDR backend (callback-based transport)

Introduce WebSDR backend enabled via ENABLE_WEBSDR,
adding an alternative callback-based transport alongside
existing socket-based TRX/OSMUX I/O

Implement:
- TRX control via osmotrxlib_process_command()
- TRXD data via apitrx_tx_call()/trx_data_read()
- clock handling via apibts_clock_ind() and external timers
- Osmux integration via ws_osmux_* helpers

Adapt scheduler to support API-based burst submission and
external timer callbacks in WebSDR mode

Disable signal handling, stats and socket I/O when building
with ENABLE_WEBSDR

Add WebSDR API entrypoint, Emscripten build target and
example configuration

Enables running BTS/TRX stack in WebAssembly environments

Change-Id: Idebd588f33afd85021813ad5821391781db683a9
dtv.comp at

#21705 (Apr 27, 2026, 9:42:15 PM)

build: add WebSDR configure option and Emscripten detection

Detect Emscripten toolchain and introduce --with-websdr
configure option

When enabled, check for libosmo-trx-websdr and required
symbol modulateBits, failing configure if missing

Change-Id: Iff4b76e339e2873686c8c15885dd498458ceb546
dtv.comp at

#21704 (Apr 27, 2026, 9:42:04 PM)

trx: handle synchronous TRX control callbacks in provision FSM

Set *_sent flags before issuing TRX control commands to ensure
correct state when responses are delivered synchronously
(e.g. WebUSB callback path)

Also guard FSM state handling in st_open_poweroff() to avoid
duplicate transitions if state was already changed by a
synchronous response

No functional change for asynchronous (socket-based) backends

Change-Id: I50c95e3796839e9fe721bff6f96fed4c490c6018
dtv.comp at

#21703 (Apr 27, 2026, 9:42:04 PM)

trx: factor out TRX ctrl message submission

Extract TRX control message sending logic into
trx_ctrl_submit_msg() and reuse it from trx_ctrl_send()

This separates message construction from transport-specific
submission and prepares for alternative backends

No functional changes intended

Change-Id: Ibbd50117db4531efbc374e43e3802f9f995362cd
dtv.comp at

#21702 (Apr 27, 2026, 9:41:57 PM)

smux: allow lchan lookup without remote address

Make rem_addr optional in osmux_lchan_find() by skipping
address comparison when it is NULL

This allows callers without socket-based addressing to
locate lchans by CID only (e.g. callback-based transports)

Change-Id: I7a275dad2353241c7b04cdb5d6cc1436a175c1f3
dtv.comp at

#21701 (Apr 27, 2026, 9:41:57 PM)

abis: add helper to update BTS identity

Introduce abis_update_bts_info() to update site_id and bts_id in
bts_dev_info at runtime

This allows adjusting BTS identity after initialization,
e.g. from external control interfaces

Change-Id: Ibafd66a1e1dc42ad0063c412087bee10d212fe33
dtv.comp at

#21700 (Apr 27, 2026, 9:41:54 PM)

trx: factor out FN timer processing into common helper

Extract core FN timer handling logic into trx_fn_timer_process()
to decouple it from timerfd-specific code.

This allows reusing the same scheduling logic for alternative
timer backends (e.g. WebSDR) while keeping timerfd integration
as a thin wrapper.

No functional changes intended.

Change-Id: Ia28cce57afb3dc97c8655e855ebd5ace7e096648
dtv.comp at

#21699 (Apr 27, 2026, 9:41:54 PM)

bts: guard AMR RTP decoder stub with HAVE_LIBOSMOCODEC_STATIC

Disable dummy osmo_amr_rtp_dec() implementation when
linking against static libosmocodec to avoid symbol
conflicts

Apply to omldummy and virtual BTS models

Change-Id: Ie19ae2013893575a2f74a87af2151034abf57870
dtv.comp at

#21698 (Apr 27, 2026, 9:40:20 PM)

trx: split TRX ctrl response parsing from socket callback

Extract TRX control response parsing logic into
trx_ctrl_parse_rsp() and call it from trx_ctrl_read_cb()

This decouples parsing from socket I/O and allows reuse
with alternative transports

No functional changes intended

Change-Id: I255c7d554aad3ac6df2c66716fae1c1fb512110e
dtv.comp at

#21697 (Apr 27, 2026, 9:40:19 PM)

trx: factor out clock indication handling into helper

Extract clock indication handling logic into trx_clk_phy()
and reuse it from trx_clk_read_cb()

This separates core FN processing from socket-specific code
and prepares for alternative clock sources (e.g. non-UDP /
in-memory callbacks used in WebSDR/WASM builds).

No functional changes intended

Change-Id: I0e6b3e25da14ada4d0ef86fd4c4e6bbc12e447d2
dtv.comp at

#21696 (Apr 27, 2026, 9:40:19 PM)

trx: add JSON stats export for WebSDR API

Introduce stats_json.c providing JSON serialization for:
- stats and counters
- rate counters
- BTS state
- TRX/transceiver state
- WebSDR runtime metrics

Add osmobts_get_stats() API to expose these via WebSDR
interface and export it in Emscripten build

This enables programmatic access to data previously available
via VTY (e.g. "show stats", "show bts")

Change-Id: Ifb82adfab879a65ecd222c45e06551983aa90a0f
dtv.comp at

#21695 (Apr 27, 2026, 9:40:17 PM)

trx: split TRXD parsing from socket callback

Extract TRXD message parsing into trx_data_read() and
reuse it from trx_data_read_cb()

This decouples parsing from socket I/O and allows reuse
with alternative transports

No functional changes intended

Change-Id: I50ad8b6d2edfd91f2d569cd8badf5c036fbf87ed
dtv.comp at

#21694 (Apr 27, 2026, 9:40:16 PM)

build: make timerfd usage optional

Check for sys/timerfd.h in configure and guard its usage
with HAVE_SYS_TIMERFD_H.

This avoids build failures on platforms where timerfd is
not available.

Change-Id: Id5a700c865f984e8f99199a1e365bb7f1462030a
dtv.comp at

#21693 (Apr 27, 2026, 9:40:15 PM)

trx: factor out burst submission into helper

Extract TRXD burst submission logic from bts_sched_flush_buffers()
into trx_sched_submit_bursts()

No functional changes intended, this prepares for alternative
backends reusing the same scheduling logic

Change-Id: I7ce61bee4ca7ca50ef190982f1a0e4ce57c8c838
dtv.comp at

#21692 (Apr 27, 2026, 9:40:15 PM)

build: make sched_* usage optional

Add configure checks for sched_* APIs and guard usage of
sched_setscheduler with HAVE_SCHED_SETSCHEDULER.

This avoids build/runtime issues on platforms without
scheduler support.

Change-Id: I5af357c1e2074fa1e05ac6bc20af8535c474d906
dtv.comp at

#21691 (Apr 27, 2026, 9:40:15 PM)

trx: factor out TRXD data submission helper

Extract TRXD data sending into trx_data_submit_msg() and
reuse it from trx_if_send_burst()

This separates transport-specific I/O from message construction
and prepares for alternative backends

No functional changes intended

Change-Id: Ie89ac6efe2f5af0b4cbe5a259a18770b8d2de859
dtv.comp at

#21690 (Apr 27, 2026, 9:40:14 PM)

smux: allow lchan lookup without remote address

Make rem_addr optional in osmux_lchan_find() by skipping
address comparison when it is NULL

This allows callers without socket-based addressing to
locate lchans by CID only (e.g. callback-based transports)

Change-Id: I7a275dad2353241c7b04cdb5d6cc1436a175c1f3
dtv.comp at

#21689 (Apr 27, 2026, 9:40:14 PM)

trx: factor out clock indication handling into helper

Extract clock indication handling logic into trx_clk_phy()
and reuse it from trx_clk_read_cb()

This separates core FN processing from socket-specific code
and prepares for alternative clock sources (e.g. non-UDP /
in-memory callbacks used in WebSDR/WASM builds).

No functional changes intended

Change-Id: I0e6b3e25da14ada4d0ef86fd4c4e6bbc12e447d2
dtv.comp at

#21688 (Apr 27, 2026, 9:40:09 PM)

abis: add helper to update BTS identity

Introduce abis_update_bts_info() to update site_id and bts_id in
bts_dev_info at runtime

This allows adjusting BTS identity after initialization,
e.g. from external control interfaces

Change-Id: Ibafd66a1e1dc42ad0063c412087bee10d212fe33
dtv.comp at

#21687 (Apr 27, 2026, 9:40:08 PM)

bts: guard AMR RTP decoder stub with HAVE_LIBOSMOCODEC_STATIC

Disable dummy osmo_amr_rtp_dec() implementation when
linking against static libosmocodec to avoid symbol
conflicts

Apply to omldummy and virtual BTS models

Change-Id: Ie19ae2013893575a2f74a87af2151034abf57870
dtv.comp at

#21686 (Apr 27, 2026, 9:38:27 PM)

trx: factor out TRX ctrl message submission

Extract TRX control message sending logic into
trx_ctrl_submit_msg() and reuse it from trx_ctrl_send()

This separates message construction from transport-specific
submission and prepares for alternative backends

No functional changes intended

Change-Id: Ibbd50117db4531efbc374e43e3802f9f995362cd
dtv.comp at

#21685 (Apr 27, 2026, 9:38:27 PM)

build: add WebSDR configure option and Emscripten detection

Detect Emscripten toolchain and introduce --with-websdr
configure option

When enabled, check for libosmo-trx-websdr and required
symbol modulateBits, failing configure if missing

Change-Id: Iff4b76e339e2873686c8c15885dd498458ceb546
dtv.comp at

#21684 (Apr 27, 2026, 9:38:26 PM)

trx: factor out FN timer processing into common helper

Extract core FN timer handling logic into trx_fn_timer_process()
to decouple it from timerfd-specific code.

This allows reusing the same scheduling logic for alternative
timer backends (e.g. WebSDR) while keeping timerfd integration
as a thin wrapper.

No functional changes intended.

Change-Id: Ia28cce57afb3dc97c8655e855ebd5ace7e096648
dtv.comp at

#21683 (Apr 27, 2026, 9:38:26 PM)

trx: handle synchronous TRX control callbacks in provision FSM

Set *_sent flags before issuing TRX control commands to ensure
correct state when responses are delivered synchronously
(e.g. WebUSB callback path)

Also guard FSM state handling in st_open_poweroff() to avoid
duplicate transitions if state was already changed by a
synchronous response

No functional change for asynchronous (socket-based) backends

Change-Id: I50c95e3796839e9fe721bff6f96fed4c490c6018
dtv.comp at

#21682 (Apr 27, 2026, 9:38:26 PM)

trx: split TRX ctrl response parsing from socket callback

Extract TRX control response parsing logic into
trx_ctrl_parse_rsp() and call it from trx_ctrl_read_cb()

This decouples parsing from socket I/O and allows reuse
with alternative transports

No functional changes intended

Change-Id: I255c7d554aad3ac6df2c66716fae1c1fb512110e
dtv.comp at

#21681 (Apr 27, 2026, 9:38:26 PM)

trx: add JSON stats export for WebSDR API

Introduce stats_json.c providing JSON serialization for:
- stats and counters
- rate counters
- BTS state
- TRX/transceiver state
- WebSDR runtime metrics

Add osmobts_get_stats() API to expose these via WebSDR
interface and export it in Emscripten build

This enables programmatic access to data previously available
via VTY (e.g. "show stats", "show bts")

Change-Id: Ifb82adfab879a65ecd222c45e06551983aa90a0f
dtv.comp at

#21680 (Apr 27, 2026, 9:38:25 PM)

trx, bts: add optional WebSDR backend (callback-based transport)

Introduce WebSDR backend enabled via ENABLE_WEBSDR,
adding an alternative callback-based transport alongside
existing socket-based TRX/OSMUX I/O

Implement:
- TRX control via osmotrxlib_process_command()
- TRXD data via apitrx_tx_call()/trx_data_read()
- clock handling via apibts_clock_ind() and external timers
- Osmux integration via ws_osmux_* helpers

Adapt scheduler to support API-based burst submission and
external timer callbacks in WebSDR mode

Disable signal handling, stats and socket I/O when building
with ENABLE_WEBSDR

Add WebSDR API entrypoint, Emscripten build target and
example configuration

Enables running BTS/TRX stack in WebAssembly environments

Change-Id: Idebd588f33afd85021813ad5821391781db683a9
dtv.comp at

#21679 (Apr 27, 2026, 9:38:25 PM)

trx: split TRXD parsing from socket callback

Extract TRXD message parsing into trx_data_read() and
reuse it from trx_data_read_cb()

This decouples parsing from socket I/O and allows reuse
with alternative transports

No functional changes intended

Change-Id: I50ad8b6d2edfd91f2d569cd8badf5c036fbf87ed
dtv.comp at

#21678 (Apr 27, 2026, 9:38:25 PM)

build: make sched_* usage optional

Add configure checks for sched_* APIs and guard usage of
sched_setscheduler with HAVE_SCHED_SETSCHEDULER.

This avoids build/runtime issues on platforms without
scheduler support.

Change-Id: I5af357c1e2074fa1e05ac6bc20af8535c474d906
dtv.comp at

#21677 (Apr 27, 2026, 9:38:25 PM)

trx: factor out burst submission into helper

Extract TRXD burst submission logic from bts_sched_flush_buffers()
into trx_sched_submit_bursts()

No functional changes intended, this prepares for alternative
backends reusing the same scheduling logic

Change-Id: I7ce61bee4ca7ca50ef190982f1a0e4ce57c8c838
dtv.comp at

#21676 (Apr 27, 2026, 9:38:25 PM)

build: make timerfd usage optional

Check for sys/timerfd.h in configure and guard its usage
with HAVE_SYS_TIMERFD_H.

This avoids build failures on platforms where timerfd is
not available.

Change-Id: Id5a700c865f984e8f99199a1e365bb7f1462030a
dtv.comp at

#21675 (Apr 27, 2026, 9:38:24 PM)

trx: factor out TRXD data submission helper

Extract TRXD data sending into trx_data_submit_msg() and
reuse it from trx_if_send_burst()

This separates transport-specific I/O from message construction
and prepares for alternative backends

No functional changes intended

Change-Id: Ie89ac6efe2f5af0b4cbe5a259a18770b8d2de859
dtv.comp at

#21674 (Apr 27, 2026, 8:47:02 PM)

vty: fix osmo_cpu_sched_vty_init() prototype

Change return type of osmo_cpu_sched_vty_init() from void to int
to match its implementation.

This fixes a prototype mismatch rejected by stricter compilers
(e.g. Emscripten).

Change-Id: Ia86e8063178ad82de098c2ff693cfbcd7e9f2192
dtv.comp at

#21673 (Apr 27, 2026, 8:46:56 PM)

vty: make CPU scheduling optional based on platform support

Add configure checks for sched_* APIs and guard their usage
in cpu_sched_vty with HAVE_SCHED_* macros.

If scheduler functions are not available, return -ENOTSUP
instead of failing at build time.

This improves portability on platforms lacking full sched
support (e.g. non-Linux or restricted environments).

Change-Id: Ic5b7e39fac16531d370cb81f769ba87fef18cb81
dtv.comp at

#21672 (Apr 27, 2026, 8:46:51 PM)

vty: fix osmo_cpu_sched_vty_init() prototype

Change return type of osmo_cpu_sched_vty_init() from void to int
to match its implementation.

This fixes a prototype mismatch rejected by stricter compilers
(e.g. Emscripten).

Change-Id: Ia86e8063178ad82de098c2ff693cfbcd7e9f2192
dtv.comp at

#21671 (Apr 27, 2026, 8:46:50 PM)

vty: make CPU scheduling optional based on platform support

Add configure checks for sched_* APIs and guard their usage
in cpu_sched_vty with HAVE_SCHED_* macros.

If scheduler functions are not available, return -ENOTSUP
instead of failing at build time.

This improves portability on platforms lacking full sched
support (e.g. non-Linux or restricted environments).

Change-Id: Ic5b7e39fac16531d370cb81f769ba87fef18cb81
dtv.comp at

#21670 (Apr 27, 2026, 8:46:44 PM)

vty: fix osmo_cpu_sched_vty_init() prototype

Change return type of osmo_cpu_sched_vty_init() from void to int
to match its implementation.

This fixes a prototype mismatch rejected by stricter compilers
(e.g. Emscripten).

Change-Id: Ia86e8063178ad82de098c2ff693cfbcd7e9f2192
dtv.comp at

#21669 (Apr 27, 2026, 8:46:41 PM)

vty: make CPU scheduling optional based on platform support

Add configure checks for sched_* APIs and guard their usage
in cpu_sched_vty with HAVE_SCHED_* macros.

If scheduler functions are not available, return -ENOTSUP
instead of failing at build time.

This improves portability on platforms lacking full sched
support (e.g. non-Linux or restricted environments).

Change-Id: Ic5b7e39fac16531d370cb81f769ba87fef18cb81
dtv.comp at

#21668 (Apr 27, 2026, 4:15:25 PM)

rspro_util: asn1 decode: fix memleak when decoding fails

Change-Id: I071343d0134dbffb1bb71ea26a5b514be1b5bb27
lynxis at

#21667 (Apr 27, 2026, 4:15:20 PM)

rspro_util: asn1 decode: fix memleak when decoding fails

Change-Id: I071343d0134dbffb1bb71ea26a5b514be1b5bb27
lynxis at

#21666 (Apr 27, 2026, 3:09:33 PM)

Fix: Prevent bankd from exiting upon SIGPIPE

If a client disconnects from a worker thread while the worker is
responding to a to a request from that client, the socket is closed and
SIGPIPE is sent to the worker, causing the application to exit.

To prevent this, all workers have a dummy handler to prevent this. Now
the worker can handle the closing of the socket.

Change-Id: I13d6e9da48d12f93c00bd2d021789bde71aca7cf
Andreas Eversberg at

#21665 (Apr 27, 2026, 3:09:31 PM)

Fix: Prevent bankd from exiting upon SIGPIPE

If a client disconnects from a worker thread while the worker is
responding to a to a request from that client, the socket is closed and
SIGPIPE is sent to the worker, causing the application to exit.

To prevent this, all workers have a dummy handler to prevent this. Now
the worker can handle the closing of the socket.

Change-Id: I13d6e9da48d12f93c00bd2d021789bde71aca7cf
Andreas Eversberg at

#21664 (Apr 27, 2026, 2:13:23 PM)

Remove unconditional assignment of asn_debug = 0

It is now the default and there is no code to set it.
Remove the assignment

Change-Id: I114e9773a1d0aa3c16990a946cf91c69b9c2498a
lynxis at

#21663 (Apr 27, 2026, 2:13:23 PM)

asn1: move asn_debug into librspro

To allow compiling the asn code with `-DEMIT_ASN_DEBUG=1`.
Otherwise it will fail with an unresolved symbol because
librspro is compiled as shared-object.
Further initialize it as disable (0).

Change-Id: Icb03e8905f3b38ecebfcf294727a01f994511cce
lynxis at

#21662 (Apr 27, 2026, 2:13:22 PM)

Remove unconditional assignment of asn_debug = 0

It is now the default and there is no code to set it.
Remove the assignment

Change-Id: I114e9773a1d0aa3c16990a946cf91c69b9c2498a
lynxis at

#21661 (Apr 27, 2026, 2:13:22 PM)

asn1: move asn_debug into librspro

To allow compiling the asn code with `-DEMIT_ASN_DEBUG=1`.
Otherwise it will fail with an unresolved symbol because
librspro is compiled as shared-object.
Further initialize it as disable (0).

Change-Id: Icb03e8905f3b38ecebfcf294727a01f994511cce
lynxis at

#21660 (Apr 27, 2026, 1:52:00 PM)

asn1: move asn_debug into librspro

To allow compiling the asn code with `-DEMIT_ASN_DEBUG=1`.
Otherwise it will fail with an unresolved symbol because
librspro is compiled as shared-object.
Further initialize it as disable (0).

Change-Id: Icb03e8905f3b38ecebfcf294727a01f994511cce
lynxis at

#21659 (Apr 27, 2026, 1:52:00 PM)

rspro_util: asn1 decode: fix memleak when decoding fails

Change-Id: I071343d0134dbffb1bb71ea26a5b514be1b5bb27
lynxis at

#21658 (Apr 27, 2026, 1:52:00 PM)

asn1: ber_decoder: disable stack size check on ctx = NULL

The stack size check is triggering when using asan or
when compile with -O1.
It is unclear why this is problematic.
This is a not a leak.

Related: OS#7002
Change-Id: Id99531f62ccdf73497bb08483ca6adbabe1a7cd7
lynxis at

#21657 (Apr 27, 2026, 1:51:59 PM)

asn1: move asn_debug into librspro

To allow compiling the asn code with `-DEMIT_ASN_DEBUG=1`.
Otherwise it will fail with an unresolved symbol because
librspro is compiled as shared-object.
Further initialize it as disable (0).

Change-Id: Icb03e8905f3b38ecebfcf294727a01f994511cce
lynxis at

#21656 (Apr 27, 2026, 1:51:59 PM)

Remove unconditional assignment of asb_debug = 0

It is now the default and there is no code to set it.
Remove the assignment

Change-Id: I114e9773a1d0aa3c16990a946cf91c69b9c2498a
lynxis at

#21655 (Apr 27, 2026, 1:51:59 PM)

Remove unconditional assignment of asb_debug = 0

It is now the default and there is no code to set it.
Remove the assignment

Change-Id: I114e9773a1d0aa3c16990a946cf91c69b9c2498a
lynxis at

#21654 (Apr 27, 2026, 1:51:59 PM)

asn1: ber_decoder: disable stack size check on ctx = NULL

The stack size check is triggering when using asan or
when compile with -O1.
It is unclear why this is problematic.
This is a not a leak.

Related: OS#7002
Change-Id: Id99531f62ccdf73497bb08483ca6adbabe1a7cd7
lynxis at

#21653 (Apr 27, 2026, 1:51:56 PM)

rspro_util: asn1 decode: fix memleak when decoding fails

Change-Id: I071343d0134dbffb1bb71ea26a5b514be1b5bb27
lynxis at

#21652 (Apr 27, 2026, 1:16:11 PM)

Fix: Prevent race conditions when accessing slotmap in bankd

All threads (main and workers) can use slotmap_by_bank() and
slotmap_by_client() to get a mapping entry from the slot map. While
working with this entry (reading values), it could be deleted by a
different thread.

For example, if a client connects to a worker, the worker will check if
there is an existing mapping between a reader and this client. If it
exists, slotmap_by_client() will return a pointer. If the mapping is
deleted at this time by the server, the worker uses a pointer to a
mapping entry that has just been freed.

Change-Id: I3464726f37beb7c47b4e1f00c018ffa4f3948906
Andreas Eversberg at

#21651 (Apr 27, 2026, 1:16:09 PM)

Fix: Prevent bankd from exiting upon SIGPIPE

If a client disconnects from a worker thread while the worker is
responding to a to a request from that client, the socket is closed and
SIGPIPE is sent to the worker, causing the application to exit.

To prevent this, all workers have a dummy handler to prevent this. Now
the worker can handle the closing of the socket.

Change-Id: I13d6e9da48d12f93c00bd2d021789bde71aca7cf
Andreas Eversberg at

#21650 (Apr 27, 2026, 1:16:08 PM)

Fix: Remove slot mapping at bankd when client disconnects

If a client disconnects before removing the slot mapping, the worker
must undefine its 'bank_id' and 'slot_nr' and must change its state to
'UNMAPPED'.

send_signal_to_worker() searches for a worker that has a given bank and
slot. If a client re-connects to a different worker and if the bank and
slot would be still assigned to the old worker, the old worker could
receive signals when assigning or removing slot mapping. The new worker
would not be mapped.

Change-Id: I2fd03490e2506c55104309a0ef952389119023b8
Andreas Eversberg at

#21649 (Apr 27, 2026, 1:16:05 PM)

Fix: Prevent bankd from exiting upon SIGPIPE

If a client disconnects from a worker thread while the worker is
responding to a to a request from that client, the socket is closed and
SIGPIPE is sent to the worker, causing the application to exit.

To prevent this, all workers have a dummy handler to prevent this. Now
the worker can handle the closing of the socket.

Change-Id: I13d6e9da48d12f93c00bd2d021789bde71aca7cf
Andreas Eversberg at

#21648 (Apr 27, 2026, 1:16:04 PM)

Fix: Prevent race conditions when accessing slotmap in bankd

All threads (main and workers) can use slotmap_by_bank() and
slotmap_by_client() to get a mapping entry from the slot map. While
working with this entry (reading values), it could be deleted by a
different thread.

For example, if a client connects to a worker, the worker will check if
there is an existing mapping between a reader and this client. If it
exists, slotmap_by_client() will return a pointer. If the mapping is
deleted at this time by the server, the worker uses a pointer to a
mapping entry that has just been freed.

Change-Id: I3464726f37beb7c47b4e1f00c018ffa4f3948906
Andreas Eversberg at

#21647 (Apr 27, 2026, 1:16:03 PM)

Fix: Remove slot mapping at bankd when client disconnects

If a client disconnects before removing the slot mapping, the worker
must undefine its 'bank_id' and 'slot_nr' and must change its state to
'UNMAPPED'.

send_signal_to_worker() searches for a worker that has a given bank and
slot. If a client re-connects to a different worker and if the bank and
slot would be still assigned to the old worker, the old worker could
receive signals when assigning or removing slot mapping. The new worker
would not be mapped.

Change-Id: I2fd03490e2506c55104309a0ef952389119023b8
Andreas Eversberg at

#21646 (Apr 27, 2026, 9:23:13 AM)

Fix: Prevent bankd from exiting upon SIGPIPE

If a client disconnects from a worker thread while the worker is
responding to a to a request from that client, the socket is closed and
SIGPIPE is sent to the worker, causing the application to exit.

To prevent this, all workers have a dummy handler to prevent this. Now
the worker can handle the closing of the socket.

Change-Id: I13d6e9da48d12f93c00bd2d021789bde71aca7cf
Andreas Eversberg at

#21645 (Apr 27, 2026, 9:23:13 AM)

Fix: Prevent bankd from exiting upon SIGPIPE

If a client disconnects from a worker thread while the worker is
responding to a to a request from that client, the socket is closed and
SIGPIPE is sent to the worker, causing the application to exit.

To prevent this, all workers have a dummy handler to prevent this. Now
the worker can handle the closing of the socket.

Change-Id: I13d6e9da48d12f93c00bd2d021789bde71aca7cf
Andreas Eversberg at

#21644 (Apr 27, 2026, 2:18:17 AM)

trx, bts: add optional WebSDR backend (callback-based transport)

Introduce WebSDR backend enabled via ENABLE_WEBSDR,
adding an alternative callback-based transport alongside
existing socket-based TRX/OSMUX I/O

Implement:
- TRX control via osmotrxlib_process_command()
- TRXD data via apitrx_tx_call()/trx_data_read()
- clock handling via apibts_clock_ind() and external timers
- Osmux integration via ws_osmux_* helpers

Adapt scheduler to support API-based burst submission and
external timer callbacks in WebSDR mode

Disable signal handling, stats and socket I/O when building
with ENABLE_WEBSDR

Add WebSDR API entrypoint, Emscripten build target and
example configuration

Enables running BTS/TRX stack in WebAssembly environments

Change-Id: Idebd588f33afd85021813ad5821391781db683a9
dtv.comp at

#21643 (Apr 27, 2026, 2:18:16 AM)

trx: add JSON stats export for WebSDR API

Introduce stats_json.c providing JSON serialization for:
- stats and counters
- rate counters
- BTS state
- TRX/transceiver state
- WebSDR runtime metrics

Add osmobts_get_stats() API to expose these via WebSDR
interface and export it in Emscripten build

This enables programmatic access to data previously available
via VTY (e.g. "show stats", "show bts")

Change-Id: Ifb82adfab879a65ecd222c45e06551983aa90a0f
dtv.comp at

#21642 (Apr 27, 2026, 2:18:15 AM)

trx, bts: add optional WebSDR backend (callback-based transport)

Introduce WebSDR backend enabled via ENABLE_WEBSDR,
adding an alternative callback-based transport alongside
existing socket-based TRX/OSMUX I/O

Implement:
- TRX control via osmotrxlib_process_command()
- TRXD data via apitrx_tx_call()/trx_data_read()
- clock handling via apibts_clock_ind() and external timers
- Osmux integration via ws_osmux_* helpers

Adapt scheduler to support API-based burst submission and
external timer callbacks in WebSDR mode

Disable signal handling, stats and socket I/O when building
with ENABLE_WEBSDR

Add WebSDR API entrypoint, Emscripten build target and
example configuration

Enables running BTS/TRX stack in WebAssembly environments

Change-Id: Idebd588f33afd85021813ad5821391781db683a9
dtv.comp at

#21641 (Apr 27, 2026, 2:18:15 AM)

trx: add JSON stats export for WebSDR API

Introduce stats_json.c providing JSON serialization for:
- stats and counters
- rate counters
- BTS state
- TRX/transceiver state
- WebSDR runtime metrics

Add osmobts_get_stats() API to expose these via WebSDR
interface and export it in Emscripten build

This enables programmatic access to data previously available
via VTY (e.g. "show stats", "show bts")

Change-Id: Ifb82adfab879a65ecd222c45e06551983aa90a0f
dtv.comp at

#21640 (Apr 27, 2026, 2:13:27 AM)

trx: add JSON stats export for WebSDR API

Introduce stats_json.c providing JSON serialization for:
- stats and counters
- rate counters
- BTS state
- TRX/transceiver state
- WebSDR runtime metrics

Add osmobts_get_stats() API to expose these via WebSDR
interface and export it in Emscripten build

This enables programmatic access to data previously available
via VTY (e.g. "show stats", "show bts")

Change-Id: Ifb82adfab879a65ecd222c45e06551983aa90a0f
dtv.comp at

#21639 (Apr 27, 2026, 2:13:27 AM)

trx, bts: add optional WebSDR backend (callback-based transport)

Introduce WebSDR backend enabled via ENABLE_WEBSDR,
adding an alternative callback-based transport alongside
existing socket-based TRX/OSMUX I/O

Implement:
- TRX control via osmotrxlib_process_command()
- TRXD data via apitrx_tx_call()/trx_data_read()
- clock handling via apibts_clock_ind() and external timers
- Osmux integration via ws_osmux_* helpers

Adapt scheduler to support API-based burst submission and
external timer callbacks in WebSDR mode

Disable signal handling, stats and socket I/O when building
with ENABLE_WEBSDR

Add WebSDR API entrypoint, Emscripten build target and
example configuration

Enables running BTS/TRX stack in WebAssembly environments

Change-Id: Idebd588f33afd85021813ad5821391781db683a9
dtv.comp at

#21638 (Apr 27, 2026, 2:13:22 AM)

trx: add JSON stats export for WebSDR API

Introduce stats_json.c providing JSON serialization for:
- stats and counters
- rate counters
- BTS state
- TRX/transceiver state
- WebSDR runtime metrics

Add osmobts_get_stats() API to expose these via WebSDR
interface and export it in Emscripten build

This enables programmatic access to data previously available
via VTY (e.g. "show stats", "show bts")

Change-Id: Ifb82adfab879a65ecd222c45e06551983aa90a0f
dtv.comp at

#21637 (Apr 27, 2026, 2:13:21 AM)

trx, bts: add optional WebSDR backend (callback-based transport)

Introduce WebSDR backend enabled via ENABLE_WEBSDR,
adding an alternative callback-based transport alongside
existing socket-based TRX/OSMUX I/O

Implement:
- TRX control via osmotrxlib_process_command()
- TRXD data via apitrx_tx_call()/trx_data_read()
- clock handling via apibts_clock_ind() and external timers
- Osmux integration via ws_osmux_* helpers

Adapt scheduler to support API-based burst submission and
external timer callbacks in WebSDR mode

Disable signal handling, stats and socket I/O when building
with ENABLE_WEBSDR

Add WebSDR API entrypoint, Emscripten build target and
example configuration

Enables running BTS/TRX stack in WebAssembly environments

Change-Id: Idebd588f33afd85021813ad5821391781db683a9
dtv.comp at

#21636 (Apr 27, 2026, 12:52:46 AM)

build: make linux/if_packet.h usage optional

Check for presence of linux/if_packet.h in configure and
guard its usage with HAVE_LINUX_IF_PACKET_H.

This avoids build failures on non-Linux platforms or
environments where the header is unavailable.

Change-Id: I8a02b0676e65fa4b6191073c84e0646a2e67a010
dtv.comp at

#21635 (Apr 27, 2026, 12:52:38 AM)

trx: factor out TRXD data submission helper

Extract TRXD data sending into trx_data_submit_msg() and
reuse it from trx_if_send_burst()

This separates transport-specific I/O from message construction
and prepares for alternative backends

No functional changes intended

Change-Id: Ie89ac6efe2f5af0b4cbe5a259a18770b8d2de859
dtv.comp at

#21634 (Apr 27, 2026, 12:52:29 AM)

trx: split TRXD parsing from socket callback

Extract TRXD message parsing into trx_data_read() and
reuse it from trx_data_read_cb()

This decouples parsing from socket I/O and allows reuse
with alternative transports

No functional changes intended

Change-Id: I50ad8b6d2edfd91f2d569cd8badf5c036fbf87ed
dtv.comp at

#21633 (Apr 27, 2026, 12:52:09 AM)

trx: handle synchronous TRX control callbacks in provision FSM

Set *_sent flags before issuing TRX control commands to ensure
correct state when responses are delivered synchronously
(e.g. WebUSB callback path)

Also guard FSM state handling in st_open_poweroff() to avoid
duplicate transitions if state was already changed by a
synchronous response

No functional change for asynchronous (socket-based) backends

Change-Id: I50c95e3796839e9fe721bff6f96fed4c490c6018
dtv.comp at

#21632 (Apr 27, 2026, 12:52:04 AM)

bts: guard AMR RTP decoder stub with HAVE_LIBOSMOCODEC_STATIC

Disable dummy osmo_amr_rtp_dec() implementation when
linking against static libosmocodec to avoid symbol
conflicts

Apply to omldummy and virtual BTS models

Change-Id: Ie19ae2013893575a2f74a87af2151034abf57870
dtv.comp at

#21631 (Apr 27, 2026, 12:52:04 AM)

smux: allow lchan lookup without remote address

Make rem_addr optional in osmux_lchan_find() by skipping
address comparison when it is NULL

This allows callers without socket-based addressing to
locate lchans by CID only (e.g. callback-based transports)

Change-Id: I7a275dad2353241c7b04cdb5d6cc1436a175c1f3
dtv.comp at

#21630 (Apr 27, 2026, 12:51:58 AM)

trx: add JSON stats export for WebSDR API

Introduce stats_json.c providing JSON serialization for:
- stats and counters
- rate counters
- BTS state
- TRX/transceiver state
- WebSDR runtime metrics

Add osmobts_get_stats() API to expose these via WebSDR
interface and export it in Emscripten build

This enables programmatic access to data previously available
via VTY (e.g. "show stats", "show bts")

Change-Id: Ifb82adfab879a65ecd222c45e06551983aa90a0f
dtv.comp at

#21629 (Apr 27, 2026, 12:51:55 AM)

trx: split TRX ctrl response parsing from socket callback

Extract TRX control response parsing logic into
trx_ctrl_parse_rsp() and call it from trx_ctrl_read_cb()

This decouples parsing from socket I/O and allows reuse
with alternative transports

No functional changes intended

Change-Id: I255c7d554aad3ac6df2c66716fae1c1fb512110e
dtv.comp at

#21628 (Apr 27, 2026, 12:51:50 AM)

trx: factor out FN timer processing into common helper

Extract core FN timer handling logic into trx_fn_timer_process()
to decouple it from timerfd-specific code.

This allows reusing the same scheduling logic for alternative
timer backends (e.g. WebSDR) while keeping timerfd integration
as a thin wrapper.

No functional changes intended.

Change-Id: Ia28cce57afb3dc97c8655e855ebd5ace7e096648
dtv.comp at

#21627 (Apr 27, 2026, 12:51:48 AM)

trx: factor out TRX ctrl message submission

Extract TRX control message sending logic into
trx_ctrl_submit_msg() and reuse it from trx_ctrl_send()

This separates message construction from transport-specific
submission and prepares for alternative backends

No functional changes intended

Change-Id: Ibbd50117db4531efbc374e43e3802f9f995362cd
dtv.comp at

#21626 (Apr 27, 2026, 12:51:43 AM)

build: add WebSDR configure option and Emscripten detection

Detect Emscripten toolchain and introduce --with-websdr
configure option

When enabled, check for libosmo-trx-websdr and required
symbol modulateBits, failing configure if missing

Change-Id: Iff4b76e339e2873686c8c15885dd498458ceb546
dtv.comp at

#21625 (Apr 27, 2026, 12:51:41 AM)

build: make timerfd usage optional

Check for sys/timerfd.h in configure and guard its usage
with HAVE_SYS_TIMERFD_H.

This avoids build failures on platforms where timerfd is
not available.

Change-Id: Id5a700c865f984e8f99199a1e365bb7f1462030a
dtv.comp at

#21624 (Apr 27, 2026, 12:51:40 AM)

trx, bts: add optional WebSDR backend (callback-based transport)

Introduce WebSDR backend enabled via ENABLE_WEBSDR,
adding an alternative callback-based transport alongside
existing socket-based TRX/OSMUX I/O

Implement:
- TRX control via osmotrxlib_process_command()
- TRXD data via apitrx_tx_call()/trx_data_read()
- clock handling via apibts_clock_ind() and external timers
- Osmux integration via ws_osmux_* helpers

Adapt scheduler to support API-based burst submission and
external timer callbacks in WebSDR mode

Disable signal handling, stats and socket I/O when building
with ENABLE_WEBSDR

Add WebSDR API entrypoint, Emscripten build target and
example configuration

Enables running BTS/TRX stack in WebAssembly environments

Change-Id: Idebd588f33afd85021813ad5821391781db683a9
dtv.comp at

#21623 (Apr 27, 2026, 12:51:36 AM)

build: make sched_* usage optional

Add configure checks for sched_* APIs and guard usage of
sched_setscheduler with HAVE_SCHED_SETSCHEDULER.

This avoids build/runtime issues on platforms without
scheduler support.

Change-Id: I5af357c1e2074fa1e05ac6bc20af8535c474d906
dtv.comp at

#21622 (Apr 27, 2026, 12:51:08 AM)

trx: factor out burst submission into helper

Extract TRXD burst submission logic from bts_sched_flush_buffers()
into trx_sched_submit_bursts()

No functional changes intended, this prepares for alternative
backends reusing the same scheduling logic

Change-Id: I7ce61bee4ca7ca50ef190982f1a0e4ce57c8c838
dtv.comp at

#21621 (Apr 27, 2026, 12:51:00 AM)

abis: add helper to update BTS identity

Introduce abis_update() to update site_id and bts_id in
bts_dev_info at runtime

This allows adjusting BTS identity after initialization,
e.g. from external control interfaces

Change-Id: Ibafd66a1e1dc42ad0063c412087bee10d212fe33
dtv.comp at

#21620 (Apr 27, 2026, 12:50:42 AM)

trx: factor out clock indication handling into helper

Extract clock indication handling logic into trx_clk_phy()
and reuse it from trx_clk_read_cb()

This separates core FN processing from socket-specific code
and prepares for alternative clock sources

No functional changes intended

Change-Id: I0e6b3e25da14ada4d0ef86fd4c4e6bbc12e447d2
dtv.comp at

#21619 (Apr 27, 2026, 12:50:41 AM)

build: make linux/if_packet.h usage optional

Check for presence of linux/if_packet.h in configure and
guard its usage with HAVE_LINUX_IF_PACKET_H.

This avoids build failures on non-Linux platforms or
environments where the header is unavailable.

Change-Id: I8a02b0676e65fa4b6191073c84e0646a2e67a010
dtv.comp at

#21618 (Apr 27, 2026, 12:50:38 AM)

trx: handle synchronous TRX control callbacks in provision FSM

Set *_sent flags before issuing TRX control commands to ensure
correct state when responses are delivered synchronously
(e.g. WebUSB callback path)

Also guard FSM state handling in st_open_poweroff() to avoid
duplicate transitions if state was already changed by a
synchronous response

No functional change for asynchronous (socket-based) backends

Change-Id: I50c95e3796839e9fe721bff6f96fed4c490c6018
dtv.comp at

#21617 (Apr 27, 2026, 12:50:37 AM)

trx: factor out TRXD data submission helper

Extract TRXD data sending into trx_data_submit_msg() and
reuse it from trx_if_send_burst()

This separates transport-specific I/O from message construction
and prepares for alternative backends

No functional changes intended

Change-Id: Ie89ac6efe2f5af0b4cbe5a259a18770b8d2de859
dtv.comp at

#21616 (Apr 27, 2026, 12:50:34 AM)

trx: split TRXD parsing from socket callback

Extract TRXD message parsing into trx_data_read() and
reuse it from trx_data_read_cb()

This decouples parsing from socket I/O and allows reuse
with alternative transports

No functional changes intended

Change-Id: I50ad8b6d2edfd91f2d569cd8badf5c036fbf87ed
dtv.comp at

#21615 (Apr 27, 2026, 12:50:31 AM)

smux: allow lchan lookup without remote address

Make rem_addr optional in osmux_lchan_find() by skipping
address comparison when it is NULL

This allows callers without socket-based addressing to
locate lchans by CID only (e.g. callback-based transports)

Change-Id: I7a275dad2353241c7b04cdb5d6cc1436a175c1f3
dtv.comp at

#21614 (Apr 27, 2026, 12:50:30 AM)

bts: guard AMR RTP decoder stub with HAVE_LIBOSMOCODEC_STATIC

Disable dummy osmo_amr_rtp_dec() implementation when
linking against static libosmocodec to avoid symbol
conflicts

Apply to omldummy and virtual BTS models

Change-Id: Ie19ae2013893575a2f74a87af2151034abf57870
dtv.comp at

#21613 (Apr 27, 2026, 12:50:26 AM)

build: make sched_* usage optional

Add configure checks for sched_* APIs and guard usage of
sched_setscheduler with HAVE_SCHED_SETSCHEDULER.

This avoids build/runtime issues on platforms without
scheduler support.

Change-Id: I5af357c1e2074fa1e05ac6bc20af8535c474d906
dtv.comp at

#21612 (Apr 27, 2026, 12:50:26 AM)

trx: factor out FN timer processing into common helper

Extract core FN timer handling logic into trx_fn_timer_process()
to decouple it from timerfd-specific code.

This allows reusing the same scheduling logic for alternative
timer backends (e.g. WebSDR) while keeping timerfd integration
as a thin wrapper.

No functional changes intended.

Change-Id: Ia28cce57afb3dc97c8655e855ebd5ace7e096648
dtv.comp at

#21611 (Apr 27, 2026, 12:50:23 AM)

trx: add JSON stats export for WebSDR API

Introduce stats_json.c providing JSON serialization for:
- stats and counters
- rate counters
- BTS state
- TRX/transceiver state
- WebSDR runtime metrics

Add osmobts_get_stats() API to expose these via WebSDR
interface and export it in Emscripten build

This enables programmatic access to data previously available
via VTY (e.g. "show stats", "show bts")

Change-Id: Ifb82adfab879a65ecd222c45e06551983aa90a0f
dtv.comp at

#21610 (Apr 27, 2026, 12:50:10 AM)

build: make timerfd usage optional

Check for sys/timerfd.h in configure and guard its usage
with HAVE_SYS_TIMERFD_H.

This avoids build failures on platforms where timerfd is
not available.

Change-Id: Id5a700c865f984e8f99199a1e365bb7f1462030a
dtv.comp at

#21609 (Apr 27, 2026, 12:49:51 AM)

trx, bts: add optional WebSDR backend (callback-based transport)

Introduce WebSDR backend enabled via ENABLE_WEBSDR,
adding an alternative callback-based transport alongside
existing socket-based TRX/OSMUX I/O

Implement:
- TRX control via osmotrxlib_process_command()
- TRXD data via apitrx_tx_call()/trx_data_read()
- clock handling via apibts_clock_ind() and external timers
- Osmux integration via ws_osmux_* helpers

Adapt scheduler to support API-based burst submission and
external timer callbacks in WebSDR mode

Disable signal handling, stats and socket I/O when building
with ENABLE_WEBSDR

Add WebSDR API entrypoint, Emscripten build target and
example configuration

Enables running BTS/TRX stack in WebAssembly environments

Change-Id: Idebd588f33afd85021813ad5821391781db683a9
dtv.comp at

#21608 (Apr 27, 2026, 12:49:37 AM)

build: add WebSDR configure option and Emscripten detection

Detect Emscripten toolchain and introduce --with-websdr
configure option

When enabled, check for libosmo-trx-websdr and required
symbol modulateBits, failing configure if missing

Change-Id: Iff4b76e339e2873686c8c15885dd498458ceb546
dtv.comp at

#21607 (Apr 27, 2026, 12:49:35 AM)

trx: factor out TRX ctrl message submission

Extract TRX control message sending logic into
trx_ctrl_submit_msg() and reuse it from trx_ctrl_send()

This separates message construction from transport-specific
submission and prepares for alternative backends

No functional changes intended

Change-Id: Ibbd50117db4531efbc374e43e3802f9f995362cd
dtv.comp at

#21606 (Apr 27, 2026, 12:49:33 AM)

trx: split TRX ctrl response parsing from socket callback

Extract TRX control response parsing logic into
trx_ctrl_parse_rsp() and call it from trx_ctrl_read_cb()

This decouples parsing from socket I/O and allows reuse
with alternative transports

No functional changes intended

Change-Id: I255c7d554aad3ac6df2c66716fae1c1fb512110e
dtv.comp at

#21605 (Apr 27, 2026, 12:49:27 AM)

trx: factor out burst submission into helper

Extract TRXD burst submission logic from bts_sched_flush_buffers()
into trx_sched_submit_bursts()

No functional changes intended, this prepares for alternative
backends reusing the same scheduling logic

Change-Id: I7ce61bee4ca7ca50ef190982f1a0e4ce57c8c838
dtv.comp at

#21604 (Apr 27, 2026, 12:49:23 AM)

trx: factor out clock indication handling into helper

Extract clock indication handling logic into trx_clk_phy()
and reuse it from trx_clk_read_cb()

This separates core FN processing from socket-specific code
and prepares for alternative clock sources

No functional changes intended

Change-Id: I0e6b3e25da14ada4d0ef86fd4c4e6bbc12e447d2
dtv.comp at

#21603 (Apr 27, 2026, 12:49:22 AM)

abis: add helper to update BTS identity

Introduce abis_update() to update site_id and bts_id in
bts_dev_info at runtime

This allows adjusting BTS identity after initialization,
e.g. from external control interfaces

Change-Id: Ibafd66a1e1dc42ad0063c412087bee10d212fe33
dtv.comp at

#21602 (Apr 27, 2026, 12:14:52 AM)

build: make timerfd usage optional

Check for sys/timerfd.h in configure and guard its usage
with HAVE_SYS_TIMERFD_H.

This avoids build failures on platforms where timerfd is
not available.

Change-Id: Id5a700c865f984e8f99199a1e365bb7f1462030a
dtv.comp at

#21601 (Apr 27, 2026, 12:14:43 AM)

smux: allow lchan lookup without remote address

Make rem_addr optional in osmux_lchan_find() by skipping
address comparison when it is NULL

This allows callers without socket-based addressing to
locate lchans by CID only (e.g. callback-based transports)

Change-Id: I7a275dad2353241c7b04cdb5d6cc1436a175c1f3
dtv.comp at

#21600 (Apr 27, 2026, 12:14:43 AM)

trx: factor out TRXD data submission helper

Extract TRXD data sending into trx_data_submit_msg() and
reuse it from trx_if_send_burst()

This separates transport-specific I/O from message construction
and prepares for alternative backends

No functional changes intended

Change-Id: Ie89ac6efe2f5af0b4cbe5a259a18770b8d2de859
dtv.comp at

#21599 (Apr 27, 2026, 12:14:43 AM)

trx: factor out FN timer processing into common helper

Extract core FN timer handling logic into trx_fn_timer_process()
to decouple it from timerfd-specific code.

This allows reusing the same scheduling logic for alternative
timer backends (e.g. WebSDR) while keeping timerfd integration
as a thin wrapper.

No functional changes intended.

Change-Id: Ia28cce57afb3dc97c8655e855ebd5ace7e096648
dtv.comp at

#21598 (Apr 27, 2026, 12:14:42 AM)

trx: factor out burst submission into helper

Extract TRXD burst submission logic from bts_sched_flush_buffers()
into trx_sched_submit_bursts()

No functional changes intended, this prepares for alternative
backends reusing the same scheduling logic

Change-Id: I7ce61bee4ca7ca50ef190982f1a0e4ce57c8c838
dtv.comp at

#21597 (Apr 27, 2026, 12:14:42 AM)

trx: factor out clock indication handling into helper

Extract clock indication handling logic into trx_clk_phy()
and reuse it from trx_clk_read_cb()

This separates core FN processing from socket-specific code
and prepares for alternative clock sources

No functional changes intended

Change-Id: I0e6b3e25da14ada4d0ef86fd4c4e6bbc12e447d2
dtv.comp at

#21596 (Apr 27, 2026, 12:14:41 AM)

trx: split TRXD parsing from socket callback

Extract TRXD message parsing into trx_data_read() and
reuse it from trx_data_read_cb()

This decouples parsing from socket I/O and allows reuse
with alternative transports

No functional changes intended

Change-Id: I50ad8b6d2edfd91f2d569cd8badf5c036fbf87ed
dtv.comp at

#21595 (Apr 27, 2026, 12:14:37 AM)

trx: handle synchronous TRX control callbacks in provision FSM

Set *_sent flags before issuing TRX control commands to ensure
correct state when responses are delivered synchronously
(e.g. WebUSB callback path)

Also guard FSM state handling in st_open_poweroff() to avoid
duplicate transitions if state was already changed by a
synchronous response

No functional change for asynchronous (socket-based) backends

Change-Id: I50c95e3796839e9fe721bff6f96fed4c490c6018
dtv.comp at

#21594 (Apr 27, 2026, 12:14:36 AM)

build: make sched_* usage optional

Add configure checks for sched_* APIs and guard usage of
sched_setscheduler with HAVE_SCHED_SETSCHEDULER.

This avoids build/runtime issues on platforms without
scheduler support.

Change-Id: I5af357c1e2074fa1e05ac6bc20af8535c474d906
dtv.comp at

#21593 (Apr 27, 2026, 12:14:30 AM)

build: add WebSDR configure option and Emscripten detection

Detect Emscripten toolchain and introduce --with-websdr
configure option

When enabled, check for libosmo-trx-websdr and required
symbol modulateBits, failing configure if missing

Change-Id: Iff4b76e339e2873686c8c15885dd498458ceb546
dtv.comp at

#21592 (Apr 27, 2026, 12:14:05 AM)

trx: split TRX ctrl response parsing from socket callback

Extract TRX control response parsing logic into
trx_ctrl_parse_rsp() and call it from trx_ctrl_read_cb()

This decouples parsing from socket I/O and allows reuse
with alternative transports

No functional changes intended

Change-Id: I255c7d554aad3ac6df2c66716fae1c1fb512110e
dtv.comp at

#21591 (Apr 27, 2026, 12:14:05 AM)

build: make linux/if_packet.h usage optional

Check for presence of linux/if_packet.h in configure and
guard its usage with HAVE_LINUX_IF_PACKET_H.

This avoids build failures on non-Linux platforms or
environments where the header is unavailable.

Change-Id: I8a02b0676e65fa4b6191073c84e0646a2e67a010
dtv.comp at

#21590 (Apr 27, 2026, 12:14:05 AM)

abis: add helper to update BTS identity

Introduce abis_update() to update site_id and bts_id in
bts_dev_info at runtime

This allows adjusting BTS identity after initialization,
e.g. from external control interfaces

Change-Id: Ibafd66a1e1dc42ad0063c412087bee10d212fe33
dtv.comp at

#21589 (Apr 27, 2026, 12:13:58 AM)

trx, bts: add optional WebSDR backend (callback-based transport)

Introduce WebSDR backend enabled via ENABLE_WEBSDR,
adding an alternative callback-based transport alongside
existing socket-based TRX/OSMUX I/O

Implement:
- TRX control via osmotrxlib_process_command()
- TRXD data via apitrx_tx_call()/trx_data_read()
- clock handling via apibts_clock_ind() and external timers
- Osmux integration via ws_osmux_* helpers

Adapt scheduler to support API-based burst submission and
external timer callbacks in WebSDR mode

Disable signal handling, stats and socket I/O when building
with ENABLE_WEBSDR

Add WebSDR API entrypoint, Emscripten build target and
example configuration

Enables running BTS/TRX stack in WebAssembly environments

Change-Id: Idebd588f33afd85021813ad5821391781db683a9
dtv.comp at

#21588 (Apr 27, 2026, 12:13:57 AM)

trx: add JSON stats export for WebSDR API

Introduce stats_json.c providing JSON serialization for:
- stats and counters
- rate counters
- BTS state
- TRX/transceiver state
- WebSDR runtime metrics

Add osmobts_get_stats() API to expose these via WebSDR
interface and export it in Emscripten build

This enables programmatic access to data previously available
via VTY (e.g. "show stats", "show bts")

Change-Id: Ifb82adfab879a65ecd222c45e06551983aa90a0f
dtv.comp at

#21587 (Apr 27, 2026, 12:13:57 AM)

bts: guard AMR RTP decoder stub with HAVE_LIBOSMOCODEC_STATIC

Disable dummy osmo_amr_rtp_dec() implementation when
linking against static libosmocodec to avoid symbol
conflicts

Apply to omldummy and virtual BTS models

Change-Id: Ie19ae2013893575a2f74a87af2151034abf57870
dtv.comp at

#21586 (Apr 27, 2026, 12:13:57 AM)

trx: factor out TRX ctrl message submission

Extract TRX control message sending logic into
trx_ctrl_submit_msg() and reuse it from trx_ctrl_send()

This separates message construction from transport-specific
submission and prepares for alternative backends

No functional changes intended

Change-Id: Ibbd50117db4531efbc374e43e3802f9f995362cd
dtv.comp at

#21585 (Apr 27, 2026, 12:13:57 AM)

build: make timerfd usage optional

Check for sys/timerfd.h in configure and guard its usage
with HAVE_SYS_TIMERFD_H.

This avoids build failures on platforms where timerfd is
not available.

Change-Id: Id5a700c865f984e8f99199a1e365bb7f1462030a
dtv.comp at

#21584 (Apr 27, 2026, 12:13:56 AM)

smux: allow lchan lookup without remote address

Make rem_addr optional in osmux_lchan_find() by skipping
address comparison when it is NULL

This allows callers without socket-based addressing to
locate lchans by CID only (e.g. callback-based transports)

Change-Id: I7a275dad2353241c7b04cdb5d6cc1436a175c1f3
dtv.comp at

#21583 (Apr 27, 2026, 12:13:54 AM)

build: make sched_* usage optional

Add configure checks for sched_* APIs and guard usage of
sched_setscheduler with HAVE_SCHED_SETSCHEDULER.

This avoids build/runtime issues on platforms without
scheduler support.

Change-Id: I5af357c1e2074fa1e05ac6bc20af8535c474d906
dtv.comp at

#21582 (Apr 27, 2026, 12:13:53 AM)

trx: handle synchronous TRX control callbacks in provision FSM

Set *_sent flags before issuing TRX control commands to ensure
correct state when responses are delivered synchronously
(e.g. WebUSB callback path)

Also guard FSM state handling in st_open_poweroff() to avoid
duplicate transitions if state was already changed by a
synchronous response

No functional change for asynchronous (socket-based) backends

Change-Id: I50c95e3796839e9fe721bff6f96fed4c490c6018
dtv.comp at

#21581 (Apr 27, 2026, 12:13:52 AM)

trx: split TRXD parsing from socket callback

Extract TRXD message parsing into trx_data_read() and
reuse it from trx_data_read_cb()

This decouples parsing from socket I/O and allows reuse
with alternative transports

No functional changes intended

Change-Id: I50ad8b6d2edfd91f2d569cd8badf5c036fbf87ed
dtv.comp at

#21580 (Apr 27, 2026, 12:13:15 AM)

trx: factor out FN timer processing into common helper

Extract core FN timer handling logic into trx_fn_timer_process()
to decouple it from timerfd-specific code.

This allows reusing the same scheduling logic for alternative
timer backends (e.g. WebSDR) while keeping timerfd integration
as a thin wrapper.

No functional changes intended.

Change-Id: Ia28cce57afb3dc97c8655e855ebd5ace7e096648
dtv.comp at

#21579 (Apr 27, 2026, 12:13:13 AM)

trx: factor out TRXD data submission helper

Extract TRXD data sending into trx_data_submit_msg() and
reuse it from trx_if_send_burst()

This separates transport-specific I/O from message construction
and prepares for alternative backends

No functional changes intended

Change-Id: Ie89ac6efe2f5af0b4cbe5a259a18770b8d2de859
dtv.comp at

#21578 (Apr 27, 2026, 12:13:13 AM)

trx: factor out burst submission into helper

Extract TRXD burst submission logic from bts_sched_flush_buffers()
into trx_sched_submit_bursts()

No functional changes intended, this prepares for alternative
backends reusing the same scheduling logic

Change-Id: I7ce61bee4ca7ca50ef190982f1a0e4ce57c8c838
dtv.comp at

#21577 (Apr 27, 2026, 12:13:13 AM)

trx: factor out clock indication handling into helper

Extract clock indication handling logic into trx_clk_phy()
and reuse it from trx_clk_read_cb()

This separates core FN processing from socket-specific code
and prepares for alternative clock sources

No functional changes intended

Change-Id: I0e6b3e25da14ada4d0ef86fd4c4e6bbc12e447d2
dtv.comp at

#21576 (Apr 27, 2026, 12:13:12 AM)

trx: add JSON stats export for WebSDR API

Introduce stats_json.c providing JSON serialization for:
- stats and counters
- rate counters
- BTS state
- TRX/transceiver state
- WebSDR runtime metrics

Add osmobts_get_stats() API to expose these via WebSDR
interface and export it in Emscripten build

This enables programmatic access to data previously available
via VTY (e.g. "show stats", "show bts")

Change-Id: Ifb82adfab879a65ecd222c45e06551983aa90a0f
dtv.comp at

#21575 (Apr 27, 2026, 12:13:12 AM)

trx: split TRX ctrl response parsing from socket callback

Extract TRX control response parsing logic into
trx_ctrl_parse_rsp() and call it from trx_ctrl_read_cb()

This decouples parsing from socket I/O and allows reuse
with alternative transports

No functional changes intended

Change-Id: I255c7d554aad3ac6df2c66716fae1c1fb512110e
dtv.comp at

#21574 (Apr 27, 2026, 12:13:11 AM)

bts: guard AMR RTP decoder stub with HAVE_LIBOSMOCODEC_STATIC

Disable dummy osmo_amr_rtp_dec() implementation when
linking against static libosmocodec to avoid symbol
conflicts

Apply to omldummy and virtual BTS models

Change-Id: Ie19ae2013893575a2f74a87af2151034abf57870
dtv.comp at

#21573 (Apr 27, 2026, 12:13:10 AM)

trx: factor out TRX ctrl message submission

Extract TRX control message sending logic into
trx_ctrl_submit_msg() and reuse it from trx_ctrl_send()

This separates message construction from transport-specific
submission and prepares for alternative backends

No functional changes intended

Change-Id: Ibbd50117db4531efbc374e43e3802f9f995362cd
dtv.comp at

#21572 (Apr 27, 2026, 12:13:10 AM)

abis: add helper to update BTS identity

Introduce abis_update() to update site_id and bts_id in
bts_dev_info at runtime

This allows adjusting BTS identity after initialization,
e.g. from external control interfaces

Change-Id: Ibafd66a1e1dc42ad0063c412087bee10d212fe33
dtv.comp at

#21571 (Apr 27, 2026, 12:13:10 AM)

build: add WebSDR configure option and Emscripten detection

Detect Emscripten toolchain and introduce --with-websdr
configure option

When enabled, check for libosmo-trx-websdr and required
symbol modulateBits, failing configure if missing

Change-Id: Iff4b76e339e2873686c8c15885dd498458ceb546
dtv.comp at

#21570 (Apr 27, 2026, 12:13:09 AM)

trx, bts: add optional WebSDR backend (callback-based transport)

Introduce WebSDR backend enabled via ENABLE_WEBSDR,
adding an alternative callback-based transport alongside
existing socket-based TRX/OSMUX I/O

Implement:
- TRX control via osmotrxlib_process_command()
- TRXD data via apitrx_tx_call()/trx_data_read()
- clock handling via apibts_clock_ind() and external timers
- Osmux integration via ws_osmux_* helpers

Adapt scheduler to support API-based burst submission and
external timer callbacks in WebSDR mode

Disable signal handling, stats and socket I/O when building
with ENABLE_WEBSDR

Add WebSDR API entrypoint, Emscripten build target and
example configuration

Enables running BTS/TRX stack in WebAssembly environments

Change-Id: Idebd588f33afd85021813ad5821391781db683a9
dtv.comp at

#21569 (Apr 27, 2026, 12:13:09 AM)

build: make linux/if_packet.h usage optional

Check for presence of linux/if_packet.h in configure and
guard its usage with HAVE_LINUX_IF_PACKET_H.

This avoids build failures on non-Linux platforms or
environments where the header is unavailable.

Change-Id: I8a02b0676e65fa4b6191073c84e0646a2e67a010
dtv.comp at

#21568 (Apr 26, 2026, 8:45:40 AM)

tcap_as_loadshare: Don't fill in PC from M3UA

If both calling and called_addr are not point codes then the compare in
tcap_trans_track_entry_find() will ignore them. It still matches on
otid/dtid.

Related: SYS#5423
Change-Id: I4f99fc87cd33ee3f2aad531710cc39a9b9c7e6d9
dwillmann at

#21567 (Apr 26, 2026, 8:45:34 AM)

tcap_as_loadshare: Route msg based on TCAP route if cache lookup fails

Related: SYS#5423
Change-Id: I2fd9068be8a0a512b17c8bd2365aa87c266e5669
dwillmann at

#21566 (Apr 26, 2026, 8:45:29 AM)

tcap_as_loadshare: Clarify name of tcap asp selection function

Change-Id: I327ad282d2689be2bcf7d3da23026717923c9325
dwillmann at

#21565 (Apr 26, 2026, 8:45:28 AM)

tcap_as_loadshare: Use tcap_trans_track_begin instead of *_entry_create

*_begin checks for a matching entry and reuses that (with an updated
timestamp). This avoids duplicate entries in the tcap cache.

Related: SYS#5423
Change-Id: Icbaab976ed8207843129291494176679db574304
dwillmann at

#21564 (Apr 26, 2026, 8:45:25 AM)

tcap_as_loadshare: Don't fill in PC from M3UA

If both calling and called_addr are not point codes then the compare in
tcap_trans_track_entry_find() will ignore them. It still matches on
otid/dtid.

Related: SYS#5423
Change-Id: I4f99fc87cd33ee3f2aad531710cc39a9b9c7e6d9
dwillmann at

#21563 (Apr 26, 2026, 8:45:24 AM)

tcap_as_loadshare: Use tcap_trans_track_begin instead of *_entry_create

*_begin checks for a matching entry and reuses that (with an updated
timestamp). This avoids duplicate entries in the tcap cache.

Related: SYS#5423
Change-Id: Icbaab976ed8207843129291494176679db574304
dwillmann at

#21562 (Apr 26, 2026, 8:45:22 AM)

tcap_as_loadshare: Route msg based on TCAP route if cache lookup fails

Related: SYS#5423
Change-Id: I2fd9068be8a0a512b17c8bd2365aa87c266e5669
dwillmann at

#21561 (Apr 26, 2026, 8:45:21 AM)

tcap_as_loadshare: Clarify name of tcap asp selection function

Change-Id: I327ad282d2689be2bcf7d3da23026717923c9325
dwillmann at

#21560 (Apr 26, 2026, 2:23:57 AM)

HDLC timeslots: fix Rx of maximum-sized frames

E1D protocol sets the maximum permitted size of an HDLC frame to
264 bytes of useful payload, not counting the 2 bytes of FCS.
This limit is fair enough, as it matches GSM TS 08.56, the primary
intended application.  However, osmo_isdnhdlc engine used internally
by the daemon requires an Rx buffer 2 bytes larger than the maximum
payload length, for temporary storage of FCS bytes: by the nature
of HDLC, a receiver has no way of identifying FCS bytes as such
until after they have been received and stored in the Rx buffer.

This bug was caught when bringing up OsmoBSC with Nokia Flexi
Multiradio BTS.  This BTS emits some long OML messages that get
broken into segments, with each not-last segment traveling over
HDLC as a maximum-sized frame - and these frames then get dropped
by osmo-e1d, causing further breakage downstream.

Change-Id: I479e8fe5118c8eb7d4e6b16b49047a3278bc9808
falcon at

#21559 (Apr 26, 2026, 2:23:57 AM)

HDLC timeslots: fix Rx of maximum-sized frames

E1D protocol sets the maximum permitted size of an HDLC frame to
264 bytes of useful payload, not counting the 2 bytes of FCS.
This limit is fair enough, as it matches GSM TS 08.56, the primary
intended application.  However, osmo_isdnhdlc engine used internally
by the daemon requires an Rx buffer 2 bytes larger than the maximum
payload length, for temporary storage of FCS bytes: by the nature
of HDLC, a receiver has no way of identifying FCS bytes as such
until after they have been received and stored in the Rx buffer.

This bug was caught when bringing up OsmoBSC with Nokia Flexi
Multiradio BTS.  This BTS emits some long OML messages that get
broken into segments, with each not-last segment traveling over
HDLC as a maximum-sized frame - and these frames then get dropped
by osmo-e1d, causing further breakage downstream.

Change-Id: I479e8fe5118c8eb7d4e6b16b49047a3278bc9808
falcon at

#21558 (Apr 26, 2026, 2:22:45 AM)

cosmetic: fix white space in lapd_sap_{start,stop}()

Change-Id: Iadf8629bc3bdf18260b1b83290ce95483d8aac2c
falcon at

#21557 (Apr 26, 2026, 2:22:44 AM)

lapd_sap_stop(): fix use of uninitialized stack memory

DL-RELEASE in lapd_core can be done in two ways: by sending DISC
and waiting for UA, or a purely local clearing of state.  The
selection between these two modes is communicated via an extended
field in struct osmo_dlsap_prim that extends beyond the standard
struct osmo_prim_hdr.  lapd_sap_stop() is a wrapper function that
sends DL-RELEASE to lapd_core; its only current users are the
vendor-specific E1 BTS handlers for Ericsson and Nokia in OsmoBSC,
and both of those need local release handling.  This wrapper
function does allocate correctly-sized struct osmo_dlsap_prim
on the stack, but until now it failed to initialize the extended
field - hence the actual behavior was subject to laws of chance,
depending on uninitialized content of stack memory.

Change-Id: Ic1469698ee8edf9b6fb55df8f79cc062be711f61
falcon at

#21556 (Apr 26, 2026, 2:22:43 AM)

cosmetic: fix white space in lapd_sap_{start,stop}()

Change-Id: Iadf8629bc3bdf18260b1b83290ce95483d8aac2c
falcon at

#21555 (Apr 26, 2026, 2:22:40 AM)

lapd_sap_stop(): fix use of uninitialized stack memory

DL-RELEASE in lapd_core can be done in two ways: by sending DISC
and waiting for UA, or a purely local clearing of state.  The
selection between these two modes is communicated via an extended
field in struct osmo_dlsap_prim that extends beyond the standard
struct osmo_prim_hdr.  lapd_sap_stop() is a wrapper function that
sends DL-RELEASE to lapd_core; its only current users are the
vendor-specific E1 BTS handlers for Ericsson and Nokia in OsmoBSC,
and both of those need local release handling.  This wrapper
function does allocate correctly-sized struct osmo_dlsap_prim
on the stack, but until now it failed to initialize the extended
field - hence the actual behavior was subject to laws of chance,
depending on uninitialized content of stack memory.

Change-Id: Ic1469698ee8edf9b6fb55df8f79cc062be711f61
falcon at

#21554 (Apr 25, 2026, 9:41:02 PM)

trx: add JSON serialization for 'show trx'

Introduce trx_to_json() helper to serialize the output of
'show trx' into JSON format.

Also initialize talloc/VTY context in websdr entrypoint to
allow accessing TRX configuration programmatically.

Intended for external consumers (e.g. WebSDR frontend).

Change-Id: Icbfb754580daa6db9b5646cc6698a6a6ee1c1610
dtv.comp at

#21553 (Apr 25, 2026, 9:41:00 PM)

trx: add JSON serialization for 'show trx'

Introduce trx_to_json() helper to serialize the output of
'show trx' into JSON format.

Also initialize talloc/VTY context in websdr entrypoint to
allow accessing TRX configuration programmatically.

Intended for external consumers (e.g. WebSDR frontend).

Change-Id: Icbfb754580daa6db9b5646cc6698a6a6ee1c1610
dtv.comp at

#21552 (Apr 24, 2026, 6:37:17 PM)

abis: align e1 input init prototypes for stricter compilers

Change return types of e1inp_dahdi_init(), e1inp_e1d_init() and
e1inp_rs232_init() from void to int to match their implementations.

Required for stricter compilers (e.g. Emscripten) which reject
mismatched function prototypes.

Change-Id: I93cd079003abb5665f1995647cfa94dc8e901ed9
dtv.comp at

#21551 (Apr 24, 2026, 6:37:17 PM)

abis: add optional WebSDR E1 input driver

Add a new optional E1 input backend for WebSDR, enabled via
--with-websdr.

Introduce input/websdr.c and public callback API to replace
socket-based IPA transport with a callback-driven interface
for OML/RSL and OSMUX.

Intended for WebAssembly builds where Osmocom components run
in a browser and communicate with SDR via WebUSB.

Change-Id: Ib804dc8eb67a91678603f54ea0beccd5c61e4a80
dtv.comp at

#21550 (Apr 24, 2026, 6:37:16 PM)

abis: align e1 input init prototypes for stricter compilers

Change return types of e1inp_dahdi_init(), e1inp_e1d_init() and
e1inp_rs232_init() from void to int to match their implementations.

Required for stricter compilers (e.g. Emscripten) which reject
mismatched function prototypes.

Change-Id: I93cd079003abb5665f1995647cfa94dc8e901ed9
dtv.comp at

#21549 (Apr 24, 2026, 6:37:16 PM)

abis: add optional WebSDR E1 input driver

Add a new optional E1 input backend for WebSDR, enabled via
--with-websdr.

Introduce input/websdr.c and public callback API to replace
socket-based IPA transport with a callback-driven interface
for OML/RSL and OSMUX.

Intended for WebAssembly builds where Osmocom components run
in a browser and communicate with SDR via WebUSB.

Change-Id: Ib804dc8eb67a91678603f54ea0beccd5c61e4a80
dtv.comp at

#21548 (Apr 23, 2026, 1:13:19 PM)

Fix: Prevent bankd from exiting upon SIGPIPE

IF a client disconnects from a worker thread while the worker is
responding to a to a request from that client, the socket is closed and
SIGPIPE is sent to the worker, causing the application to exit.

To prevent this, all workers have a dummy handler to prevent this. Now
the worker can handle the closing of the socket.

Change-Id: I13d6e9da48d12f93c00bd2d021789bde71aca7cf
Andreas Eversberg at

#21547 (Apr 23, 2026, 1:13:19 PM)

Fix: Prevent race conditions when accessing slotmap in bankd

All threads (main and workers) can use slotmap_by_bank() and
slotmap_by_client() to get a mapping entry from the slot map. While
working with this entry (reading values), it could be deleted by a
different thread.

For example, if a client connects to a worker, the worker will check if
there is an existing mapping between a reader and this client. If it
exists, slotmap_by_client() will return a pointer. If the mapping is
deleted at this time by the server, the worker uses a pointer to a
mapping entry that has just been freed.

Change-Id: I3464726f37beb7c47b4e1f00c018ffa4f3948906
Andreas Eversberg at

#21546 (Apr 23, 2026, 1:13:17 PM)

Fix: Prevent bankd from exiting upon SIGPIPE

IF a client disconnects from a worker thread while the worker is
responding to a to a request from that client, the socket is closed and
SIGPIPE is sent to the worker, causing the application to exit.

To prevent this, all workers have a dummy handler to prevent this. Now
the worker can handle the closing of the socket.

Change-Id: I13d6e9da48d12f93c00bd2d021789bde71aca7cf
Andreas Eversberg at

#21545 (Apr 23, 2026, 1:13:17 PM)

Fix: Prevent race conditions when accessing slotmap in bankd

All threads (main and workers) can use slotmap_by_bank() and
slotmap_by_client() to get a mapping entry from the slot map. While
working with this entry (reading values), it could be deleted by a
different thread.

For example, if a client connects to a worker, the worker will check if
there is an existing mapping between a reader and this client. If it
exists, slotmap_by_client() will return a pointer. If the mapping is
deleted at this time by the server, the worker uses a pointer to a
mapping entry that has just been freed.

Change-Id: I3464726f37beb7c47b4e1f00c018ffa4f3948906
Andreas Eversberg at

#21544 (Apr 23, 2026, 11:52:54 AM)

Fix: Prevent bankd from exiting upon SIGPIPE

IF a client disconnects from a worker thread while the worker is
responding to a to a request from that client, the socket is closed and
SIGPIPE is sent to the worker, causing the application to exit.

To prevent this, all workers have a dummy handler to prevent this. Now
the worker can handle the closing of the socket.

Change-Id: I13d6e9da48d12f93c00bd2d021789bde71aca7cf
Andreas Eversberg at

#21543 (Apr 23, 2026, 11:52:54 AM)

Fix: Prevent race conditions when accessing slotmap in bankd

All threads (main and workers) can use slotmap_by_bank() and
slotmap_by_client() to get a mapping entry from the slot map. While
working with this entry (reading values), it could be deleted by a
different thread.

For example, if a client connects to a worker, the worker will check if
there is an existing mapping between a reader and this client. If it
exists, slotmap_by_client() will return a pointer. If the mapping is
deleted at this time by the server, the worker uses a pointer to a
mapping entry that has just been freed.

Change-Id: I3464726f37beb7c47b4e1f00c018ffa4f3948906
Andreas Eversberg at

#21542 (Apr 23, 2026, 11:52:52 AM)

Fix: Prevent bankd from exiting upon SIGPIPE

IF a client disconnects from a worker thread while the worker is
responding to a to a request from that client, the socket is closed and
SIGPIPE is sent to the worker, causing the application to exit.

To prevent this, all workers have a dummy handler to prevent this. Now
the worker can handle the closing of the socket.

Change-Id: I13d6e9da48d12f93c00bd2d021789bde71aca7cf
Andreas Eversberg at

#21541 (Apr 23, 2026, 11:52:52 AM)

Fix: Prevent race conditions when accessing slotmap in bankd

All threads (main and workers) can use slotmap_by_bank() and
slotmap_by_client() to get a mapping entry from the slot map. While
working with this entry (reading values), it could be deleted by a
different thread.

For example, if a client connects to a worker, the worker will check if
there is an existing mapping between a reader and this client. If it
exists, slotmap_by_client() will return a pointer. If the mapping is
deleted at this time by the server, the worker uses a pointer to a
mapping entry that has just been freed.

Change-Id: I3464726f37beb7c47b4e1f00c018ffa4f3948906
Andreas Eversberg at

#21540 (Apr 22, 2026, 10:22:10 PM)

build: detect pthread_setname_np and sched_* APIs, guard usage

Add configure checks for pthread_setname_np and sched_* functions.
Wrap their usage with HAVE_* guards to avoid build failures on
platforms where they are unavailable.

Return -ENOTSUP for unsupported scheduler operations.

Improves portability across non-Linux and restricted environments
(e.g. WebAssembly).

Change-Id: Ic3f1492544439d88c5e6683330c6696de1c2f85b
dtv.comp at

#21539 (Apr 22, 2026, 10:22:10 PM)

convolve: avoid function pointer casts by adding wrapper functions

Introduce _base_convolve_*_void() wrappers matching the expected
function pointer signatures and use them instead of casting
_base_convolve_* functions to (void *).

This removes unsafe function pointer casts and improves
type safety, which is required for stricter toolchains and
non-native targets (e.g. WebAssembly)

Change-Id: Idecb118be285eb3e4691d1761d0d8fa24fd80c75
dtv.comp at

#21538 (Apr 22, 2026, 10:22:09 PM)

transceiver: add optional WebSDR device support

- Add support for WebSDR devices enabled via the --with-websdr
configure flag.
- add libosmo-trx-websdr library and pkg-config file
- update .gitignore for wasm and pkg-config artifacts

Change-Id: Ia0d340c323c2eea28fbe82601ba0af7cfbd68f6d
dtv.comp at

#21537 (Apr 22, 2026, 10:22:09 PM)

device: add WebSDR radio backend

Introduce a new optional WebSDR device backend, enabled via
--with-websdr.

Add WebSDRDevice implementation and build integration, providing
a RadioDevice interface backed by callback hooks for control and
sample I/O.

Intended for Web-based deployments where osmo-trx interacts with
SDR hardware via a WebSDR/WebUSB frontend.

Change-Id: Ie459cbd70388dd8ff5b89221d30770bab0bd9014
dtv.comp at

#21536 (Apr 22, 2026, 10:22:05 PM)

build: detect pthread_setname_np and sched_* APIs, guard usage

Add configure checks for pthread_setname_np and sched_* functions.
Wrap their usage with HAVE_* guards to avoid build failures on
platforms where they are unavailable.

Return -ENOTSUP for unsupported scheduler operations.

Improves portability across non-Linux and restricted environments
(e.g. WebAssembly).

Change-Id: Ic3f1492544439d88c5e6683330c6696de1c2f85b
dtv.comp at

#21535 (Apr 22, 2026, 10:22:05 PM)

device: add WebSDR radio backend

Introduce a new optional WebSDR device backend, enabled via
--with-websdr.

Add WebSDRDevice implementation and build integration, providing
a RadioDevice interface backed by callback hooks for control and
sample I/O.

Intended for Web-based deployments where osmo-trx interacts with
SDR hardware via a WebSDR/WebUSB frontend.

Change-Id: Ie459cbd70388dd8ff5b89221d30770bab0bd9014
dtv.comp at

#21534 (Apr 22, 2026, 10:22:04 PM)

convolve: avoid function pointer casts by adding wrapper functions

Introduce _base_convolve_*_void() wrappers matching the expected
function pointer signatures and use them instead of casting
_base_convolve_* functions to (void *).

This removes unsafe function pointer casts and improves
type safety, which is required for stricter toolchains and
non-native targets (e.g. WebAssembly)

Change-Id: Idecb118be285eb3e4691d1761d0d8fa24fd80c75
dtv.comp at

#21533 (Apr 22, 2026, 10:22:02 PM)

transceiver: add optional WebSDR device support

- Add support for WebSDR devices enabled via the --with-websdr
configure flag.
- add libosmo-trx-websdr library and pkg-config file
- update .gitignore for wasm and pkg-config artifacts

Change-Id: Ia0d340c323c2eea28fbe82601ba0af7cfbd68f6d
dtv.comp at

#21532 (Apr 22, 2026, 9:20:19 PM)

abis: add optional WebSDR E1 input driver

Add a new optional E1 input backend for WebSDR, enabled via
--with-websdr.

Introduce input/websdr.c and public callback API to replace
socket-based IPA transport with a callback-driven interface
for OML/RSL and OSMUX.

Intended for WebAssembly builds where Osmocom components run
in a browser and communicate with SDR via WebUSB.

Change-Id: Ib804dc8eb67a91678603f54ea0beccd5c61e4a80
dtv.comp at

#21531 (Apr 22, 2026, 9:20:17 PM)

abis: add optional WebSDR E1 input driver

Add a new optional E1 input backend for WebSDR, enabled via
--with-websdr.

Introduce input/websdr.c and public callback API to replace
socket-based IPA transport with a callback-driven interface
for OML/RSL and OSMUX.

Intended for WebAssembly builds where Osmocom components run
in a browser and communicate with SDR via WebUSB.

Change-Id: Ib804dc8eb67a91678603f54ea0beccd5c61e4a80
dtv.comp at

#21530 (Apr 22, 2026, 9:14:07 PM)

abis: add optional WebSDR E1 input driver

Add a new optional E1 input backend for WebSDR, enabled via
--with-websdr.

Introduce input/websdr.c and public callback API to replace
socket-based IPA transport with a callback-driven interface
for OML/RSL and OSMUX.

Intended for WebAssembly builds where Osmocom components run
in a browser and communicate with SDR via WebUSB.

Change-Id: Ib804dc8eb67a91678603f54ea0beccd5c61e4a80
dtv.comp at

#21529 (Apr 22, 2026, 9:14:06 PM)

abis: add optional WebSDR E1 input driver

Add a new optional E1 input backend for WebSDR, enabled via
--with-websdr.

Introduce input/websdr.c and public callback API to replace
socket-based IPA transport with a callback-driven interface
for OML/RSL and OSMUX.

Intended for WebAssembly builds where Osmocom components run
in a browser and communicate with SDR via WebUSB.

Change-Id: Ib804dc8eb67a91678603f54ea0beccd5c61e4a80
dtv.comp at

#21528 (Apr 22, 2026, 9:12:09 PM)

vty: make CPU scheduling optional based on platform support

Add configure checks for sched_* APIs and guard their usage
in cpu_sched_vty with HAVE_SCHED_* macros.

If scheduler functions are not available, return -ENOTSUP
instead of failing at build time.

Also change osmo_cpu_sched_vty_init() to return int.

This improves portability on platforms lacking full sched
support (e.g. non-Linux or restricted environments).

Change-Id: Ic5b7e39fac16531d370cb81f769ba87fef18cb81
dtv.comp at

#21527 (Apr 22, 2026, 9:12:09 PM)

vty: make CPU scheduling optional based on platform support

Add configure checks for sched_* APIs and guard their usage
in cpu_sched_vty with HAVE_SCHED_* macros.

If scheduler functions are not available, return -ENOTSUP
instead of failing at build time.

Also change osmo_cpu_sched_vty_init() to return int.

This improves portability on platforms lacking full sched
support (e.g. non-Linux or restricted environments).

Change-Id: Ic5b7e39fac16531d370cb81f769ba87fef18cb81
dtv.comp at

#21526 (Apr 22, 2026, 9:12:04 PM)

vty: make CPU scheduling optional based on platform support

Add configure checks for sched_* APIs and guard their usage
in cpu_sched_vty with HAVE_SCHED_* macros.

If scheduler functions are not available, return -ENOTSUP
instead of failing at build time.

Also change osmo_cpu_sched_vty_init() to return int.

This improves portability on platforms lacking full sched
support (e.g. non-Linux or restricted environments).

Change-Id: Ic5b7e39fac16531d370cb81f769ba87fef18cb81
dtv.comp at

#21525 (Apr 22, 2026, 8:48:40 PM)

abis: add optional WebSDR E1 input driver

Add a new optional E1 input backend for WebSDR, enabled via
--with-websdr.

Introduce input/websdr.c and public callback API to replace
socket-based IPA transport with a callback-driven interface
for OML/RSL and OSMUX.

Intended for WebAssembly builds where Osmocom components run
in a browser and communicate with SDR via WebUSB.

Change-Id: Ib804dc8eb67a91678603f54ea0beccd5c61e4a80
dtv.comp at

#21524 (Apr 22, 2026, 8:48:35 PM)

abis: add optional WebSDR E1 input driver

Add a new optional E1 input backend for WebSDR, enabled via
--with-websdr.

Introduce input/websdr.c and public callback API to replace
socket-based IPA transport with a callback-driven interface
for OML/RSL and OSMUX.

Intended for WebAssembly builds where Osmocom components run
in a browser and communicate with SDR via WebUSB.

Change-Id: Ib804dc8eb67a91678603f54ea0beccd5c61e4a80
dtv.comp at

#21523 (Apr 21, 2026, 7:12:50 AM)

Fix: Remove slot mapping at bankd when client disconnects

If a client disconnects before removing the slot mapping, the slotmap
entry will not be removed automatically. A subsequent client connection
for the same mapping will then trigger the the error: “ignoring
identical slotmap.”

In a setup with multiple readers, there are multiple bankd worker
threads. If a client re-connects, but if its connection is accepted by
a different thread, subsequent reader access or unmapping will fail.
There will be no mapping at the new thread.

The approach of this fix is to remove the slot mapping, if the client
connection to the worker thread terminates.

Change-Id: I2fd03490e2506c55104309a0ef952389119023b8
Andreas Eversberg at

#21522 (Apr 21, 2026, 7:12:49 AM)

Fix: Remove slot mapping at bankd when client disconnects

If a client disconnects before removing the slot mapping, the slotmap
entry will not be removed automatically. A subsequent client connection
for the same mapping will then trigger the the error: “ignoring
identical slotmap.”

In a setup with multiple readers, there are multiple bankd worker
threads. If a client re-connects, but if its connection is accepted by
a different thread, subsequent reader access or unmapping will fail.
There will be no mapping at the new thread.

The approach of this fix is to remove the slot mapping, if the client
connection to the worker thread terminates.

Change-Id: I2fd03490e2506c55104309a0ef952389119023b8
Andreas Eversberg at

#21521 (Apr 21, 2026, 7:08:58 AM)

Fix: Remove slot mapping at bankd when client disconnects

If a client disconnects before removing the slot mapping, the slotmap
entry will not be removed automatically. A subsequent client connection
for the same mapping will then trigger the the error: “ignoring
identical slotmap.”

In a setup with multiple readers, there are multiple bankd worker
threads. If a client re-connects, but if its connection is accepted by
a different thread, subsequent reader access or unmapping will fail.
There will be no mapping at the new thread.

The approach of this fix is to remove the slot mapping, if the client
connection to the worker thread terminates.

Change-Id: I2fd03490e2506c55104309a0ef952389119023b8
Andreas Eversberg at

#21520 (Apr 21, 2026, 7:08:55 AM)

Fix: Remove slot mapping at bankd when client disconnects

If a client disconnects before removing the slot mapping, the slotmap
entry will not be removed automatically. A subsequent client connection
for the same mapping will then trigger the the error: “ignoring
identical slotmap.”

In a setup with multiple readers, there are multiple bankd worker
threads. If a client re-connects, but if its connection is accepted by
a different thread, subsequent reader access or unmapping will fail.
There will be no mapping at the new thread.

The approach of this fix is to remove the slot mapping, if the client
connection to the worker thread terminates.

Change-Id: I2fd03490e2506c55104309a0ef952389119023b8
Andreas Eversberg at

#21519 (Apr 21, 2026, 6:52:36 AM)

Fix: Remove slot mapping at bankd when client disconnects

If a client disconnects before removing the slot mapping, the slotmap
entry will not be removed automatically. A subsequent client connection
for the same mapping will then trigger the the error: “ignoring
identical slotmap.”

In a setup with multiple readers, there are multiple bankd worker
threads. If a client re-connects, but if its connection is accepted by
a different thread, subsequent reader access or unmapping will fail.
There will be no mapping at the new thread.

The approach of this fix is to remove the slot mapping, if the client
connection to the worker thread terminates.

Change-Id: I2fd03490e2506c55104309a0ef952389119023b8
Andreas Eversberg at

#21518 (Apr 21, 2026, 6:52:34 AM)

Fix: Remove slot mapping at bankd when client disconnects

If a client disconnects before removing the slot mapping, the slotmap
entry will not be removed automatically. A subsequent client connection
for the same mapping will then trigger the the error: “ignoring
identical slotmap.”

In a setup with multiple readers, there are multiple bankd worker
threads. If a client re-connects, but if its connection is accepted by
a different thread, subsequent reader access or unmapping will fail.
There will be no mapping at the new thread.

The approach of this fix is to remove the slot mapping, if the client
connection to the worker thread terminates.

Change-Id: I2fd03490e2506c55104309a0ef952389119023b8
Andreas Eversberg at

#21517 (Apr 21, 2026, 6:42:09 AM)

Fix: Remove slot mapping at bankd when client disconnects

If a client disconnects before removing the slot mapping, the slotmap
entry will not be removed automatically. A subsequent client connection
for the same mapping will then trigger the the error: “ignoring
identical slotmap.”

In a setup with multiple readers, there are multiple bankd worker
threads. If a client re-connects, but if its connection is accepted by
a different thread, subsequent reader access or unmapping will fail.
There will be no mapping at the new thread.

The approach of this fix is to remove the slot mapping, if the client
connection to the worker thread terminates.

Change-Id: I2fd03490e2506c55104309a0ef952389119023b8
Andreas Eversberg at

#21516 (Apr 21, 2026, 6:42:04 AM)

Fix: Remove slot mapping at bankd when client disconnects

If a client disconnects before removing the slot mapping, the slotmap
entry will not be removed automatically. A subsequent client connection
for the same mapping will then trigger the the error: “ignoring
identical slotmap.”

In a setup with multiple readers, there are multiple bankd worker
threads. If a client re-connects, but if its connection is accepted by
a different thread, subsequent reader access or unmapping will fail.
There will be no mapping at the new thread.

The approach of this fix is to remove the slot mapping, if the client
connection to the worker thread terminates.

Change-Id: I2fd03490e2506c55104309a0ef952389119023b8
Andreas Eversberg at

#21515 (Apr 20, 2026, 2:37:30 PM)

Fix: Remove slot mapping at bankd when client disconnects

If a client disconnects before removing the slot mapping, the slotmap
entry will not be removed automatically. A subsequent client connection
for the same mapping will then trigger the the error: “ignoring
identical slotmap.”

In a setup with multiple readers, there are multiple bankd worker
threads. If a client re-connects, but if its connection is accepted by
a different thread, subsequent reader access or unmapping will fail.
There will be no mapping at the new thread.

The approach of this fix is to remove the slot mapping, if the client
connection to the worker thread terminates.

Change-Id: I2fd03490e2506c55104309a0ef952389119023b8
Andreas Eversberg at

#21514 (Apr 20, 2026, 2:37:28 PM)

Fix: Remove slot mapping at bankd when client disconnects

If a client disconnects before removing the slot mapping, the slotmap
entry will not be removed automatically. A subsequent client connection
for the same mapping will then trigger the the error: “ignoring
identical slotmap.”

In a setup with multiple readers, there are multiple bankd worker
threads. If a client re-connects, but if its connection is accepted by
a different thread, subsequent reader access or unmapping will fail.
There will be no mapping at the new thread.

The approach of this fix is to remove the slot mapping, if the client
connection to the worker thread terminates.

Change-Id: I2fd03490e2506c55104309a0ef952389119023b8
Andreas Eversberg at

#21513 (Apr 17, 2026, 1:49:29 PM)

osmo_io: iofd_txqueue_dequeue(): fix double next->io_len decrement

The fill-up logic in iofd_txqueue_dequeue() was incorrectly
decrementing next->io_len twice: once when removing a buffer that
didn't fit, and again when assigning to msg_iovlen.  This may cause
next->io_len to reach 0 and trigger an assert at osmo_io.c:274:

  Assert failed next->io_len > 0

Add separate osmo_io_backpressure_test to verify queue management
under network backpressure conditions.  Use separate .ok files for
poll vs io_uring backends since they produce different I/O patterns.
This unit test reproduces the assert when the fix is not applied.

Change-Id: Ia96e25d11d8d683fa9dd0c56bdac257992edd782
Fixes: 3c2a02db4 ("osmo-io: Put together message buffers when dequeued from tx queue")
Related: OS#6997
Vadim Yanitskiy at

#21512 (Apr 17, 2026, 1:49:29 PM)

osmo_io: iofd_txqueue_dequeue(): fix double next->io_len decrement

The fill-up logic in iofd_txqueue_dequeue() was incorrectly
decrementing next->io_len twice: once when removing a buffer that
didn't fit, and again when assigning to msg_iovlen.  This may cause
next->io_len to reach 0 and trigger an assert at osmo_io.c:274:

  Assert failed next->io_len > 0

Add separate osmo_io_backpressure_test to verify queue management
under network backpressure conditions.  Use separate .ok files for
poll vs io_uring backends since they produce different I/O patterns.
This unit test reproduces the assert when the fix is not applied.

Change-Id: Ia96e25d11d8d683fa9dd0c56bdac257992edd782
Fixes: 3c2a02db4 ("osmo-io: Put together message buffers when dequeued from tx queue")
Related: OS#6997
Vadim Yanitskiy at

#21511 (Apr 17, 2026, 1:49:28 PM)

osmo_io: iofd_txqueue_dequeue(): fix double next->io_len decrement

The fill-up logic in iofd_txqueue_dequeue() was incorrectly
decrementing next->io_len twice: once when removing a buffer that
didn't fit, and again when assigning to msg_iovlen.  This may cause
next->io_len to reach 0 and trigger an assert at osmo_io.c:274:

  Assert failed next->io_len > 0

Add separate osmo_io_backpressure_test to verify queue management
under network backpressure conditions.  Use separate .ok files for
poll vs io_uring backends since they produce different I/O patterns.
This unit test reproduces the assert when the fix is not applied.

Change-Id: Ia96e25d11d8d683fa9dd0c56bdac257992edd782
Fixes: 3c2a02db4 ("osmo-io: Put together message buffers when dequeued from tx queue")
Related: OS#6997
Vadim Yanitskiy at

#21510 (Apr 17, 2026, 1:43:28 PM)

osmo_io: iofd_txqueue_dequeue(): fix double next->io_len decrement

The fill-up logic in iofd_txqueue_dequeue() was incorrectly
decrementing next->io_len twice: once when removing a buffer that
didn't fit, and again when assigning to msg_iovlen.  This may cause
next->io_len to reach 0 and trigger an assert at osmo_io.c:274:

  Assert failed next->io_len > 0

Add separate osmo_io_backpressure_test to verify queue management
under network backpressure conditions.  Use separate .ok files for
poll vs io_uring backends since they produce different I/O patterns.
This unit test reproduces the assert when the fix is not applied.

Change-Id: Ia96e25d11d8d683fa9dd0c56bdac257992edd782
Fixes: 3c2a02db4 ("osmo-io: Put together message buffers when dequeued from tx queue")
Related: OS#6997
Vadim Yanitskiy at

#21509 (Apr 17, 2026, 1:43:28 PM)

osmo_io: iofd_txqueue_dequeue(): fix double next->io_len decrement

The fill-up logic in iofd_txqueue_dequeue() was incorrectly
decrementing next->io_len twice: once when removing a buffer that
didn't fit, and again when assigning to msg_iovlen.  This may cause
next->io_len to reach 0 and trigger an assert at osmo_io.c:274:

  Assert failed next->io_len > 0

Add separate osmo_io_backpressure_test to verify queue management
under network backpressure conditions.  Use separate .ok files for
poll vs io_uring backends since they produce different I/O patterns.
This unit test reproduces the assert when the fix is not applied.

Change-Id: Ia96e25d11d8d683fa9dd0c56bdac257992edd782
Fixes: 3c2a02db4 ("osmo-io: Put together message buffers when dequeued from tx queue")
Related: OS#6997
Vadim Yanitskiy at

#21508 (Apr 17, 2026, 1:43:22 PM)

osmo_io: iofd_txqueue_dequeue(): fix double next->io_len decrement

The fill-up logic in iofd_txqueue_dequeue() was incorrectly
decrementing next->io_len twice: once when removing a buffer that
didn't fit, and again when assigning to msg_iovlen.  This may cause
next->io_len to reach 0 and trigger an assert at osmo_io.c:274:

  Assert failed next->io_len > 0

Add separate osmo_io_backpressure_test to verify queue management
under network backpressure conditions.  Use separate .ok files for
poll vs io_uring backends since they produce different I/O patterns.
This unit test reproduces the assert when the fix is not applied.

Change-Id: Ia96e25d11d8d683fa9dd0c56bdac257992edd782
Fixes: 3c2a02db4 ("osmo-io: Put together message buffers when dequeued from tx queue")
Related: OS#6997
Vadim Yanitskiy at

#21507 (Apr 15, 2026, 10:03:02 AM)

Reset 'release_99' flag in test cases at comment_start()

Rather than resetting release_99 flag in every test case that did set
it, do it in comment_start().

Change-Id: I55a49dd24a5df6ee8e28fa6b410988e82d10c554
Andreas Eversberg at

#21506 (Apr 15, 2026, 10:02:59 AM)

Reset 'release_99' flag in test cases at comment_start()

Rather than resetting release_99 flag in every test case that did set
it, do it in comment_start().

Change-Id: I55a49dd24a5df6ee8e28fa6b410988e82d10c554
Andreas Eversberg at

#21505 (Apr 15, 2026, 9:49:23 AM)

Bump version: 1.13.1.12-8e6ea → 1.14.0

Change-Id: Ifa079c76148fd25f543b7875d3d89b35c19ffe6b
Oliver Smith at

#21504 (Apr 15, 2026, 9:49:18 AM)

Bump version: 1.13.1.12-8e6ea → 1.14.0

Change-Id: Ifa079c76148fd25f543b7875d3d89b35c19ffe6b
Oliver Smith at

#21503 (Apr 15, 2026, 9:49:18 AM)

Bump version: 1.13.1.12-8e6ea → 1.14.0

Change-Id: Ifa079c76148fd25f543b7875d3d89b35c19ffe6b
Oliver Smith at

#21502 (Apr 14, 2026, 9:41:41 PM)

contrib/jenkins.sh: use Gitea mirrors for libnftnl and nftables

Change-Id: I28950d823dfd91e8e2ac23a19e5a86d1027096b3
Depends: osmo-ci.git I830a16c8bf7f595b16113bf2ba5e81bae56533dd
Vadim Yanitskiy at

#21501 (Apr 14, 2026, 9:41:41 PM)

contrib/jenkins.sh: use Gitea mirrors for libnftnl and nftables

Change-Id: I28950d823dfd91e8e2ac23a19e5a86d1027096b3
Depends: osmo-ci.git I830a16c8bf7f595b16113bf2ba5e81bae56533dd
Vadim Yanitskiy at

#21500 (Apr 14, 2026, 11:16:25 AM)

contrib/jenkins.sh: use Gitea mirrors for libnftnl and nftables

Change-Id: I28950d823dfd91e8e2ac23a19e5a86d1027096b3
Depends: osmo-ci.git I830a16c8bf7f595b16113bf2ba5e81bae56533dd
Vadim Yanitskiy at

#21499 (Apr 14, 2026, 11:16:24 AM)

contrib/jenkins.sh: use Gitea mirrors for libnftnl and nftables

Change-Id: I28950d823dfd91e8e2ac23a19e5a86d1027096b3
Depends: osmo-ci.git I830a16c8bf7f595b16113bf2ba5e81bae56533dd
Vadim Yanitskiy at

#21498 (Apr 13, 2026, 1:56:52 PM)

Check for protocol extension bit in message type at a central location

Bits 8 and 7 of message type can be used as sequence number or have
specific default values. The added check will verify the bits according
to the prococol descriptor and Release version.

The Rules for these bits are described in GSM TS 124.007, clause
11.2.3.2.1 for Release <= 98 and 11.2.3.2.2 for Release >= 99.

There is also no need to clear bit 7 in message type for these
protocols, as it is done already in gsm48_hdr_msg_type().

Some unit tests fail without fixes that are included in this patch.

Change-Id: Iae41bc6a2e9fd85583509b6c6154dd5a935fb5df
Andreas Eversberg at

#21497 (Apr 13, 2026, 1:56:50 PM)

Check for protocol extension bit in message type at a central location

Bits 8 and 7 of message type can be used as sequence number or have
specific default values. The added check will verify the bits according
to the prococol descriptor and Release version.

The Rules for these bits are described in GSM TS 124.007, clause
11.2.3.2.1 for Release <= 98 and 11.2.3.2.2 for Release >= 99.

There is also no need to clear bit 7 in message type for these
protocols, as it is done already in gsm48_hdr_msg_type().

Some unit tests fail without fixes that are included in this patch.

Change-Id: Iae41bc6a2e9fd85583509b6c6154dd5a935fb5df
Andreas Eversberg at

#21496 (Apr 12, 2026, 12:26:54 PM)

.gitignore: add missing osmux_{input,output}_test

Take a chance to group test binaries and specify their full paths.

Change-Id: Icb9014fe3c501940cef2d599403aa102135dd384
Vadim Yanitskiy at

#21495 (Apr 12, 2026, 12:26:52 PM)

.gitignore: add missing osmux_{input,output}_test

Take a chance to group test binaries and specify their full paths.

Change-Id: Icb9014fe3c501940cef2d599403aa102135dd384
Vadim Yanitskiy at

#21494 (Apr 12, 2026, 12:26:51 PM)

.gitignore: add missing osmux_{input,output}_test

Take a chance to group test binaries and specify their full paths.

Change-Id: Icb9014fe3c501940cef2d599403aa102135dd384
Vadim Yanitskiy at

#21493 (Apr 11, 2026, 9:08:15 AM)

firmware/se_k2xx: add board specific AFC params

Set afc_slope to 405 and afc_initial_dac_value to -370, derived from
AFC parameter averages computed across TIFFS readings of 7 unique
SE K2xx units (5 x K200i + 1 x K205i + 1 x K220i).

Change-Id: Iee2569c124dd0160f16457e0171cfd48d961045e
Related: OS#5822
Vadim Yanitskiy at

#21492 (Apr 11, 2026, 9:08:15 AM)

firmware/se_k2xx: add board specific RF tables

SE K2xx phones use a different PA than GTA0x/FCDEV3B, so the
compiled-in Tx ramp templates must match the actual hardware.
Replace the previously copied GTA0x ramps with values extracted
from the SE K2xx official firmware using the calextract tool
from the freecalypso-reveng repository:

https://www.freecalypso.org/hg/freecalypso-reveng/

The Tx levels tables are left unchanged, as they are believed to
be the same TI internal defaults across these designs.

Change-Id: If90973ae6bf9af1cd15e2d80e0b99fe098b648bd
Related: OS#5822
Vadim Yanitskiy at

#21491 (Apr 11, 2026, 9:08:15 AM)

firmware/se_k2xx: add board specific AFC params

Set afc_slope to 405 and afc_initial_dac_value to -370, derived from
AFC parameter averages computed across TIFFS readings of 7 unique
SE K2xx units (5 x K200i + 1 x K205i + 1 x K220i).

Change-Id: Iee2569c124dd0160f16457e0171cfd48d961045e
Related: OS#5822
Vadim Yanitskiy at

#21490 (Apr 11, 2026, 9:08:15 AM)

firmware/se_k2xx: add board specific RF tables

SE K2xx phones use a different PA than GTA0x/FCDEV3B, so the
compiled-in Tx ramp templates must match the actual hardware.
Replace the previously copied GTA0x ramps with values extracted
from the SE K2xx official firmware using the calextract tool
from the freecalypso-reveng repository:

https://www.freecalypso.org/hg/freecalypso-reveng/

The Tx levels tables are left unchanged, as they are believed to
be the same TI internal defaults across these designs.

Change-Id: If90973ae6bf9af1cd15e2d80e0b99fe098b648bd
Related: OS#5822
Vadim Yanitskiy at

#21489 (Apr 10, 2026, 11:02:43 PM)

firmware/se_k2xx: add board specific AFC params

Set afc_slope to 405 and afc_initial_dac_value to -2957, derived from
AFC parameter averages computed across TIFFS readings of 7 unique
SE K2xx units (5 x K200i + 1 x K205i + 1 x K220i).

Change-Id: Iee2569c124dd0160f16457e0171cfd48d961045e
Related: OS#5822
Vadim Yanitskiy at

#21488 (Apr 10, 2026, 11:02:43 PM)

firmware/se_k2xx: add board specific RF tables

SE K2xx phones use a different PA than GTA0x/FCDEV3B, so the
compiled-in Tx ramp templates must match the actual hardware.
Replace the previously copied GTA0x ramps with values extracted
from the SE K2xx official firmware using the calextract tool
from the freecalypso-reveng repository:

https://www.freecalypso.org/hg/freecalypso-reveng/

The Tx levels tables are left unchanged, as they are believed to
be the same TI internal defaults across these designs.

Change-Id: If90973ae6bf9af1cd15e2d80e0b99fe098b648bd
Related: OS#5822
Vadim Yanitskiy at

#21487 (Apr 10, 2026, 11:02:39 PM)

firmware/se_k2xx: add board specific AFC params

Set afc_slope to 405 and afc_initial_dac_value to -2957, derived from
AFC parameter averages computed across TIFFS readings of 7 unique
SE K2xx units (5 x K200i + 1 x K205i + 1 x K220i).

Change-Id: Iee2569c124dd0160f16457e0171cfd48d961045e
Related: OS#5822
Vadim Yanitskiy at

#21486 (Apr 10, 2026, 11:02:39 PM)

firmware/se_k2xx: add board specific RF tables

SE K2xx phones use a different PA than GTA0x/FCDEV3B, so the
compiled-in Tx ramp templates must match the actual hardware.
Replace the previously copied GTA0x ramps with values extracted
from the SE K2xx official firmware using the calextract tool
from the freecalypso-reveng repository:

https://www.freecalypso.org/hg/freecalypso-reveng/

The Tx levels tables are left unchanged, as they are believed to
be the same TI internal defaults across these designs.

Change-Id: If90973ae6bf9af1cd15e2d80e0b99fe098b648bd
Related: OS#5822
Vadim Yanitskiy at

#21485 (Apr 10, 2026, 10:15:43 PM)

firmware/se_k2xx: add board specific RF tables

SE K2xx phones use a different PA than GTA0x/FCDEV3B, so the
compiled-in Tx ramp templates must match the actual hardware.
Replace the previously copied GTA0x ramps with values extracted
from the SE K2xx official firmware using the calextract tool
from the freecalypso-reveng repository:

https://www.freecalypso.org/hg/freecalypso-reveng/

The Tx levels tables are left unchanged, as they are believed to
be the same TI internal defaults across these designs.

Change-Id: If90973ae6bf9af1cd15e2d80e0b99fe098b648bd
Related: OS#5822
Vadim Yanitskiy at

#21484 (Apr 10, 2026, 10:15:42 PM)

firmware/se_k2xx: add board specific AFC params

Set afc_slope to 405 and afc_initial_dac_value to -2957, derived from
AFC parameter averages computed across TIFFS readings of 7 unique
SE K2xx units (5 x K200i + 1 x K205i + 1 x K220i).

Change-Id: Iee2569c124dd0160f16457e0171cfd48d961045e
Related: OS#5822
Vadim Yanitskiy at

#21483 (Apr 10, 2026, 10:15:41 PM)

firmware/se_k2xx: add board specific RF tables

SE K2xx phones use a different PA than GTA0x/FCDEV3B, so the
compiled-in Tx ramp templates must match the actual hardware.
Replace the previously copied GTA0x ramps with values extracted
from the SE K2xx official firmware using the calextract tool
from the freecalypso-reveng repository:

https://www.freecalypso.org/hg/freecalypso-reveng/

The Tx levels tables are left unchanged, as they are believed to
be the same TI internal defaults across these designs.

Change-Id: If90973ae6bf9af1cd15e2d80e0b99fe098b648bd
Related: OS#5822
Vadim Yanitskiy at

#21482 (Apr 10, 2026, 10:15:41 PM)

firmware/se_k2xx: add board specific AFC params

Set afc_slope to 405 and afc_initial_dac_value to -2957, derived from
AFC parameter averages computed across TIFFS readings of 7 unique
SE K2xx units (5 x K200i + 1 x K205i + 1 x K220i).

Change-Id: Iee2569c124dd0160f16457e0171cfd48d961045e
Related: OS#5822
Vadim Yanitskiy at

#21481 (Apr 10, 2026, 7:41:54 PM)

csn1: ProcessError_impl(): add a missing newline

The comment about caller's responsibility is wrong and misleading.
The caller provides format string parameters, not the format string!

Change-Id: I0f7c0a6d25db03c1fe8503b57053130ed29baf23
Vadim Yanitskiy at

#21480 (Apr 10, 2026, 7:41:49 PM)

csn1: ProcessError_impl(): add a missing newline

The comment about caller's responsibility is wrong and misleading.
The caller provides format string parameters, not the format string!

Change-Id: I0f7c0a6d25db03c1fe8503b57053130ed29baf23
Vadim Yanitskiy at

#21479 (Apr 9, 2026, 3:11:18 PM)

sgsn_libgtp: fix NULL dereference in cb_delete_context()

sgsn_pdp_ctx_free() contains an abnormal path (with a backtrace log)
for the case where a PDP context is freed while its libgtp handle is
still attached.  In that path, lib->priv is set to NULL to prevent
other callbacks (e.g. cb_data_ind()) from dereferencing the already-
freed sgsn_pdp_ctx.

When libgtp subsequently calls cb_delete_context() as part of its own
teardown, pdp->priv is NULL, causing an immediate NULL dereference at
the pctx->lib = NULL assignment.

Guard against this by returning early when priv is NULL: the SGSN-side
context is already gone, so there is nothing left for the callback to do.

Change-Id: I7d800766b08d87b6f2b23a0cd45435925f9998ff
Vadim Yanitskiy at

#21478 (Apr 9, 2026, 3:11:16 PM)

sgsn_libgtp: fix NULL dereference in cb_delete_context()

sgsn_pdp_ctx_free() contains an abnormal path (with a backtrace log)
for the case where a PDP context is freed while its libgtp handle is
still attached.  In that path, lib->priv is set to NULL to prevent
other callbacks (e.g. cb_data_ind()) from dereferencing the already-
freed sgsn_pdp_ctx.

When libgtp subsequently calls cb_delete_context() as part of its own
teardown, pdp->priv is NULL, causing an immediate NULL dereference at
the pctx->lib = NULL assignment.

Guard against this by returning early when priv is NULL: the SGSN-side
context is already gone, so there is nothing left for the callback to do.

Change-Id: I7d800766b08d87b6f2b23a0cd45435925f9998ff
Vadim Yanitskiy at

#21477 (Apr 9, 2026, 10:31:14 AM)

rspro_server: don't access the msg on error cases

The msg is NULL on errors.

Related: SYS#7930
Change-Id: I4e95c2473acd72cd2e01df329691c8f31882b3d9
lynxis at

#21476 (Apr 9, 2026, 10:31:06 AM)

rspro_server: don't access the msg on error cases

The msg is NULL on errors.

Related: SYS#7930
Change-Id: I4e95c2473acd72cd2e01df329691c8f31882b3d9
lynxis at

#21475 (Apr 9, 2026, 10:30:43 AM)

rspro_server: don't access the msg on error cases

The msg is NULL on errors.

Related: SYS#7930
Change-Id: I4e95c2473acd72cd2e01df329691c8f31882b3d9
lynxis at

#21474 (Apr 9, 2026, 10:30:35 AM)

rspro_server: don't access the msg on error cases

The msg is NULL on errors.

Related: SYS#7930
Change-Id: I4e95c2473acd72cd2e01df329691c8f31882b3d9
lynxis at

#21473 (Apr 8, 2026, 11:00:06 PM)

handover_fsm: send_handover_performed(): check lchan != NULL

The target lchan is expected to be valid on HO_RESULT_OK, but it's
still safer to check it against NULL before dereferencing.

Change-Id: Iee734c98dc79681808e7d75360c208a941cc6821
Related: 107391d8c ("handover_fsm: fix send_handover_performed() using wrong lchan")
Vadim Yanitskiy at

#21472 (Apr 8, 2026, 11:00:03 PM)

assignment_fsm: ipacc_chan_mode_supported(): log unsupported chan_mode

Change-Id: I1718994e25ff1349618bdb4660afbe735c5c3977
Related: aa959d74f ("assignment_fsm: check ipaccess channel mode support")
Vadim Yanitskiy at

#21471 (Apr 8, 2026, 11:00:02 PM)

handover_fsm: send_handover_performed(): check lchan != NULL

The target lchan is expected to be valid on HO_RESULT_OK, but it's
still safer to check it against NULL before dereferencing.

Change-Id: Iee734c98dc79681808e7d75360c208a941cc6821
Related: 107391d8c ("handover_fsm: fix send_handover_performed() using wrong lchan")
Vadim Yanitskiy at

#21470 (Apr 8, 2026, 11:00:01 PM)

assignment_fsm: ipacc_chan_mode_supported(): log unsupported chan_mode

Change-Id: I1718994e25ff1349618bdb4660afbe735c5c3977
Related: aa959d74f ("assignment_fsm: check ipaccess channel mode support")
Vadim Yanitskiy at

#21469 (Apr 7, 2026, 1:29:42 PM)

gprs_gmm: gsm48_rx_gmm_att_req(): drop stale PDP contexts on re-Attach

When an MS sends an Attach Request with a known IMSI or P-TMSI, it
implies the MS has restarted and lost all its PDP context state.  The
SGSN must clean up any PDP contexts it still holds for that subscriber;
otherwise it will not create new ones upon subsequent PDP Context
Activation, causing data connectivity failure after a device reboot.

Change-Id: I20c1f5f741275115635188b2f4b1c5fe7c6e40f1
Related: OS#6922
Vadim Yanitskiy at

#21468 (Apr 7, 2026, 1:29:40 PM)

gprs_gmm: gsm48_rx_gmm_att_req(): drop stale PDP contexts on re-Attach

When an MS sends an Attach Request with a known IMSI or P-TMSI, it
implies the MS has restarted and lost all its PDP context state.  The
SGSN must clean up any PDP contexts it still holds for that subscriber;
otherwise it will not create new ones upon subsequent PDP Context
Activation, causing data connectivity failure after a device reboot.

Change-Id: I20c1f5f741275115635188b2f4b1c5fe7c6e40f1
Related: OS#6922
Vadim Yanitskiy at

#21467 (Apr 7, 2026, 11:02:12 AM)

tests/osmo-sgsn_test-nodes.vty: add missing list entries

Change-Id: I6b4cbbae30c602d0fd4ef9b2f91c97f20217eb53
Vadim Yanitskiy at

#21466 (Apr 7, 2026, 11:02:11 AM)

gprs_sm: QoS: make max-sdu-size configurable

Some phones, such as the Sony Ericsson Z520, reject or ignore the
Activate PDP Context Accept if they dislike the max-sdu-size value
in the QoS profile.  Make this value configurable via the VTY so
it can be adjusted to accommodate such devices.

Change-Id: I0819da18dafecf322f8902643dae8dbcaa5dc98b
Related: OS#6735
Vadim Yanitskiy at

#21465 (Apr 7, 2026, 11:02:05 AM)

tests/osmo-sgsn_test-nodes.vty: add missing list entries

Change-Id: I6b4cbbae30c602d0fd4ef9b2f91c97f20217eb53
Vadim Yanitskiy at

#21464 (Apr 7, 2026, 11:02:02 AM)

gprs_sm: QoS: make max-sdu-size configurable

Some phones, such as the Sony Ericsson Z520, reject or ignore the
Activate PDP Context Accept if they dislike the max-sdu-size value
in the QoS profile.  Make this value configurable via the VTY so
it can be adjusted to accommodate such devices.

Change-Id: I0819da18dafecf322f8902643dae8dbcaa5dc98b
Related: OS#6735
Vadim Yanitskiy at

#21463 (Apr 7, 2026, 9:35:55 AM)

osmo-bts-omldummy: properly report NM_ATT_IPACC_SUPP_FEATURES

osmo-bts-omldummy is used as the OML backend in the ttcn3-bsc-test.
The common OML code encodes bts->support.* and trx->support.* fields
verbatim into the IPA Supported Features IE (NM_ATT_IPACC_SUPP_FEATURES)
in Get Attributes Responses.  Since bts_model_init() and
bts_model_trx_init() never initialized these fields, they were reported
as all-zeros to osmo-bsc.

osmo-bsc now inspects the supported channel modes before activating a
channel.  An all-zero chan_modes value (present but no bits set) causes
osmo-bsc to reject every speech mode, breaking all assignment-related
TTCN-3 test cases.

Initialize ciphers, gprs_codings, freq_bands, chan_types and chan_modes
to sensible values, matching what osmo-bts-virtual does, so that
osmo-bts-omldummy reports its capabilities correctly.

Change-Id: I7fe83f78c829c300e70a59509847b815a77974d7
Fixes: 0978d1df ("oml: implement handling of NM_ATT_IPACC_SUPP_FEATURES")
Related: OS#6324
Vadim Yanitskiy at

#21462 (Apr 7, 2026, 9:35:54 AM)

osmo-bts-omldummy: properly report NM_ATT_IPACC_SUPP_FEATURES

osmo-bts-omldummy is used as the OML backend in the ttcn3-bsc-test.
The common OML code encodes bts->support.* and trx->support.* fields
verbatim into the IPA Supported Features IE (NM_ATT_IPACC_SUPP_FEATURES)
in Get Attributes Responses.  Since bts_model_init() and
bts_model_trx_init() never initialized these fields, they were reported
as all-zeros to osmo-bsc.

osmo-bsc now inspects the supported channel modes before activating a
channel.  An all-zero chan_modes value (present but no bits set) causes
osmo-bsc to reject every speech mode, breaking all assignment-related
TTCN-3 test cases.

Initialize ciphers, gprs_codings, freq_bands, chan_types and chan_modes
to sensible values, matching what osmo-bts-virtual does, so that
osmo-bts-omldummy reports its capabilities correctly.

Change-Id: I7fe83f78c829c300e70a59509847b815a77974d7
Fixes: 0978d1df ("oml: implement handling of NM_ATT_IPACC_SUPP_FEATURES")
Related: OS#6324
Vadim Yanitskiy at

#21461 (Apr 6, 2026, 4:57:33 PM)

gprs_sm: QoS: make max-sdu-size configurable

Some phones, such as the Sony Ericsson Z520, reject or ignore the
Activate PDP Context Accept if they dislike the max-sdu-size value
in the QoS profile.  Make this value configurable via the VTY so
it can be adjusted to accommodate such devices.

Change-Id: I0819da18dafecf322f8902643dae8dbcaa5dc98b
Related: OS#6735
Vadim Yanitskiy at

#21460 (Apr 6, 2026, 4:57:33 PM)

tests/osmo-sgsn_test-nodes.vty: add missing list entries

Change-Id: I6b4cbbae30c602d0fd4ef9b2f91c97f20217eb53
Vadim Yanitskiy at

#21459 (Apr 6, 2026, 4:57:29 PM)

gprs_sm: QoS: make max-sdu-size configurable

Some phones, such as the Sony Ericsson Z520, reject or ignore the
Activate PDP Context Accept if they dislike the max-sdu-size value
in the QoS profile.  Make this value configurable via the VTY so
it can be adjusted to accommodate such devices.

Change-Id: I0819da18dafecf322f8902643dae8dbcaa5dc98b
Related: OS#6735
Vadim Yanitskiy at

#21458 (Apr 6, 2026, 4:57:28 PM)

tests/osmo-sgsn_test-nodes.vty: add missing list entries

Change-Id: I6b4cbbae30c602d0fd4ef9b2f91c97f20217eb53
Vadim Yanitskiy at

#21457 (Apr 6, 2026, 4:25:31 PM)

gprs_sm: gsm48_tx_gsm_act_pdp_acc(): fix QoS profile length

The Activate PDP Context Accept was always sending sizeof(default_qos)
(14 bytes) as the QoS profile length, regardless of what the UE
requested.  Older modules such as the Air20X may crash and restart
during PDP attachment because of that.

In GTP, qos_req.l encodes 1 ARP byte followed by the QoS profile
octets, so (qos_req.l - 1) is the actual profile length.  Mirror
back the same QoS profile length the UE sent in its request,
capped at sizeof(default_qos) to avoid overrunning the default_qos
buffer.  This matters in particular for R97/R98 UEs that send a
3-byte QoS profile and should not receive a 14-byte response.

Change-Id: I11c24b64f0e49cf80c825969dbf018b2948d855c
Related: OS#6922
Vadim Yanitskiy at

#21456 (Apr 6, 2026, 4:25:31 PM)

gprs_gmm: gsm48_rx_gmm_att_req(): drop stale PDP contexts on re-Attach

When an MS sends an Attach Request with a known IMSI or P-TMSI, it
implies the MS has restarted and lost all its PDP context state.  The
SGSN must clean up any PDP contexts it still holds for that subscriber;
otherwise it will not create new ones upon subsequent PDP Context
Activation, causing data connectivity failure after a device reboot.

Change-Id: I20c1f5f741275115635188b2f4b1c5fe7c6e40f1
Related: OS#6922
Vadim Yanitskiy at

#21455 (Apr 6, 2026, 4:25:29 PM)

gprs_sm: gsm48_tx_gsm_act_pdp_acc(): fix QoS profile length

The Activate PDP Context Accept was always sending sizeof(default_qos)
(14 bytes) as the QoS profile length, regardless of what the UE
requested.  Older modules such as the Air20X may crash and restart
during PDP attachment because of that.

In GTP, qos_req.l encodes 1 ARP byte followed by the QoS profile
octets, so (qos_req.l - 1) is the actual profile length.  Mirror
back the same QoS profile length the UE sent in its request,
capped at sizeof(default_qos) to avoid overrunning the default_qos
buffer.  This matters in particular for R97/R98 UEs that send a
3-byte QoS profile and should not receive a 14-byte response.

Change-Id: I11c24b64f0e49cf80c825969dbf018b2948d855c
Related: OS#6922
Vadim Yanitskiy at

#21454 (Apr 6, 2026, 4:25:28 PM)

gprs_gmm: gsm48_rx_gmm_att_req(): drop stale PDP contexts on re-Attach

When an MS sends an Attach Request with a known IMSI or P-TMSI, it
implies the MS has restarted and lost all its PDP context state.  The
SGSN must clean up any PDP contexts it still holds for that subscriber;
otherwise it will not create new ones upon subsequent PDP Context
Activation, causing data connectivity failure after a device reboot.

Change-Id: I20c1f5f741275115635188b2f4b1c5fe7c6e40f1
Related: OS#6922
Vadim Yanitskiy at

#21453 (Apr 6, 2026, 2:52:19 PM)

bssap: use LOGPFSML in bssmap_handle_assignm_req()

Change-Id: If99661c0ff1177214bacdb2d1bcb9da1d2d2957c
Vadim Yanitskiy at

#21452 (Apr 6, 2026, 2:49:11 PM)

lchan_fsm: don't mark lchan as BORKEN on unsupported mode NACK

When the BTS NACKs a Channel Activation with RSL_ERR_SERV_OPT_UNAVAIL
or RSL_ERR_SERV_OPT_UNIMPL, it means the requested service or channel
mode is not supported - not that the hardware is broken.  In this
case the lchan should transition to LCHAN_ST_WAIT_AFTER_ERROR rather
than LCHAN_ST_BORKEN, which is reserved for genuine hardware failures.

Also add LCHAN_EV_RTP_ERROR to LCHAN_ST_WAIT_AFTER_ERROR's in_event_mask
so that a late LCHAN_EV_RTP_ERROR (e.g. MGCP CRCX timeout arriving after
the NACK was already handled) is silently absorbed rather than triggering
an unexpected-event warning.

Change-Id: Ide3830a697501a0c245a41451302f1e68d553b3c
Related: osmo-ttcn3-hacks.git I000b7b44749380c5af4da42abe37b4ada6e06ee4
Related: OS#6324
Vadim Yanitskiy at

#21451 (Apr 6, 2026, 2:48:45 PM)

assignment_fsm: pass lchan to lchan_type_compat_with_mode()

The lchan pointer is needed by the next patch, which will check
the BTS ipaccess supported-features flags to reject channel modes
that the BTS has reported as unsupported before attempting to
activate the lchan.

Change-Id: I51d5d1a1cf3c51f85f738196967d5c69870681bb
Related: OS#6324
Vadim Yanitskiy at

#21450 (Apr 6, 2026, 2:48:39 PM)

bssap: mark some pointers as const

Change-Id: Iebb28d6ae0b468545994669248a442dd17f36d4c
Vadim Yanitskiy at

#21449 (Apr 6, 2026, 2:48:38 PM)

assignment_fsm: check ipaccess channel mode support

Add ipacc_chan_mode_supported(), which checks the NM_IPAC_F_CHANM_*
flags stored in the Baseband Transceiver's MO state (populated during
OML bring-up) to decide whether the BTS can handle a requested channel
mode.  If the IE containing supported channel modes was never received,
the function returns true as if the given mode was supported.

Without this change, requesting a channel mode not supported by the
BTS results in a NACK to the RSL Channel Activation, which causes
the lchan to be marked as BROKEN and thus unavailable.

Change-Id: I680ba7993786f5486d671f931e75df4543670a37
Related: OS#6324
Vadim Yanitskiy at

#21448 (Apr 6, 2026, 2:48:37 PM)

ipaccess: fix buffer overread in ipacc_parse_supp_flags()

The loop used OSMO_MAX(e->len, 4), which iterates at least 4 times
even when the IE is shorter than 4 bytes, causing a buffer overread.
Replace with OSMO_MIN(e->len, sizeof(u32)) to cap the iteration both
at the actual IE length and at the uint32_t accumulator size.

Change-Id: I97c69a71eb650cbef1cc3652d0a2a966cfd6cf60
Vadim Yanitskiy at

#21447 (Apr 6, 2026, 2:48:36 PM)

bssap: use LOGPFSML in bssmap_handle_ass_req_tp_codec_list()

Change-Id: Ie51ada174388f4c3e9ffe8a5bec4297bda38584b
Vadim Yanitskiy at

#21446 (Apr 6, 2026, 2:48:36 PM)

lchan_fsm: ignore late lchan_rtp_fsm events

The lchan_rtp_fsm is a child FSM that manages the MGW/RTP endpoint.
When the parent lchan_fsm transitions away before the child has
finished its work (e.g. a CRCX timeout or a DLCX completing after
the lchan is already idle), the child can still deliver
LCHAN_EV_RTP_RELEASED or LCHAN_EV_RTP_ERROR to the parent.

Currently these late events are not in the in_event_mask of every
state that can be reached with the child still running:

* LCHAN_ST_UNUSED: entered from WAIT_AFTER_ERROR after the error timer
  fires, while a DLCX triggered at error time may still be in flight.
* LCHAN_ST_WAIT_AFTER_ERROR: already handles LCHAN_EV_RTP_RELEASED but
  misses LCHAN_EV_RTP_ERROR (e.g. CRCX timeout arriving after the
  NACK was handled).

Add the missing events to both states' in_event_mask and provide a
no-op handler in lchan_fsm_unused() so that the assert is not hit.

Change-Id: Ie6333bd941e4e5a6ddf0e3f113b8764e8bc2bbc0
Vadim Yanitskiy at

#21445 (Apr 6, 2026, 2:47:45 PM)

ipaccess: store Supported Features IE to the MO state

Change-Id: Ic89d42c478677ffda4d544f461e7850dd3157040
Related: OS#6324
Vadim Yanitskiy at

#21444 (Apr 6, 2026, 2:47:44 PM)

handover_fsm: fix send_handover_performed() using wrong lchan

send_handover_performed() is called from handover_end() before
gscon_change_primary_lchan() updates conn->lchan to the new lchan.
As a result, the Cell Identifier, Chosen Channel, Chosen Encryption
Algorithm, and Speech Version/Codec IEs were all populated from the
source (old) lchan rather than the target (new) lchan.

As per 3GPP TS 48.008 §3.2.1.25, HANDOVER PERFORMED must report the
target cell and channel.  For intra-BSC handover to a different BTS
this caused the MSC to receive the wrong Cell Identifier.

Fix by initialising lchan from ho->new_lchan instead of conn->lchan,
and deriving the BTS via lchan->ts->trx->bts.

Change-Id: I4111351dc38fc2dbe844c2bd07b3ecfaaadd864e
Related: osmo-ttcn3-hacks.git I82aadcc3a80c183cb93522b829071294b156a218
Found-By: Claude Sonnet 4.6
Vadim Yanitskiy at

#21443 (Apr 6, 2026, 2:47:44 PM)

lchan_fsm: don't mark lchan as BORKEN on unsupported mode NACK

When the BTS NACKs a Channel Activation with RSL_ERR_SERV_OPT_UNAVAIL
or RSL_ERR_SERV_OPT_UNIMPL, it means the requested service or channel
mode is not supported - not that the hardware is broken.  In this
case the lchan should transition to LCHAN_ST_WAIT_AFTER_ERROR rather
than LCHAN_ST_BORKEN, which is reserved for genuine hardware failures.

Also add LCHAN_EV_RTP_ERROR to LCHAN_ST_WAIT_AFTER_ERROR's in_event_mask
so that a late LCHAN_EV_RTP_ERROR (e.g. MGCP CRCX timeout arriving after
the NACK was already handled) is silently absorbed rather than triggering
an unexpected-event warning.

Change-Id: Ide3830a697501a0c245a41451302f1e68d553b3c
Related: osmo-ttcn3-hacks.git I000b7b44749380c5af4da42abe37b4ada6e06ee4
Related: OS#6324
Vadim Yanitskiy at

#21442 (Apr 6, 2026, 2:44:49 PM)

assignment_fsm: pass lchan to lchan_type_compat_with_mode()

The lchan pointer is needed by the next patch, which will check
the BTS ipaccess supported-features flags to reject channel modes
that the BTS has reported as unsupported before attempting to
activate the lchan.

Change-Id: I51d5d1a1cf3c51f85f738196967d5c69870681bb
Related: OS#6324
Vadim Yanitskiy at

#21441 (Apr 6, 2026, 2:44:30 PM)

bssap: use LOGPFSML in bssmap_handle_assignm_req()

Change-Id: If99661c0ff1177214bacdb2d1bcb9da1d2d2957c
Vadim Yanitskiy at

#21440 (Apr 6, 2026, 2:44:26 PM)

bssap: mark some pointers as const

Change-Id: Iebb28d6ae0b468545994669248a442dd17f36d4c
Vadim Yanitskiy at

#21439 (Apr 6, 2026, 2:44:24 PM)

ipaccess: fix buffer overread in ipacc_parse_supp_flags()

The loop used OSMO_MAX(e->len, 4), which iterates at least 4 times
even when the IE is shorter than 4 bytes, causing a buffer overread.
Replace with OSMO_MIN(e->len, sizeof(u32)) to cap the iteration both
at the actual IE length and at the uint32_t accumulator size.

Change-Id: I97c69a71eb650cbef1cc3652d0a2a966cfd6cf60
Vadim Yanitskiy at

#21438 (Apr 6, 2026, 2:43:52 PM)

assignment_fsm: check ipaccess channel mode support

Add ipacc_chan_mode_supported(), which checks the NM_IPAC_F_CHANM_*
flags stored in the Baseband Transceiver's MO state (populated during
OML bring-up) to decide whether the BTS can handle a requested channel
mode.  If the IE containing supported channel modes was never received,
the function returns true as if the given mode was supported.

Without this change, requesting a channel mode not supported by the
BTS results in a NACK to the RSL Channel Activation, which causes
the lchan to be marked as BROKEN and thus unavailable.

Change-Id: I680ba7993786f5486d671f931e75df4543670a37
Related: OS#6324
Vadim Yanitskiy at

#21437 (Apr 6, 2026, 2:43:51 PM)

bssap: use LOGPFSML in bssmap_handle_ass_req_tp_codec_list()

Change-Id: Ie51ada174388f4c3e9ffe8a5bec4297bda38584b
Vadim Yanitskiy at

#21436 (Apr 6, 2026, 2:43:51 PM)

lchan_fsm: ignore late lchan_rtp_fsm events

The lchan_rtp_fsm is a child FSM that manages the MGW/RTP endpoint.
When the parent lchan_fsm transitions away before the child has
finished its work (e.g. a CRCX timeout or a DLCX completing after
the lchan is already idle), the child can still deliver
LCHAN_EV_RTP_RELEASED or LCHAN_EV_RTP_ERROR to the parent.

Currently these late events are not in the in_event_mask of every
state that can be reached with the child still running:

* LCHAN_ST_UNUSED: entered from WAIT_AFTER_ERROR after the error timer
  fires, while a DLCX triggered at error time may still be in flight.
* LCHAN_ST_WAIT_AFTER_ERROR: already handles LCHAN_EV_RTP_RELEASED but
  misses LCHAN_EV_RTP_ERROR (e.g. CRCX timeout arriving after the
  NACK was handled).

Add the missing events to both states' in_event_mask and provide a
no-op handler in lchan_fsm_unused() so that the assert is not hit.

Change-Id: Ie6333bd941e4e5a6ddf0e3f113b8764e8bc2bbc0
Vadim Yanitskiy at

#21435 (Apr 6, 2026, 2:43:51 PM)

handover_fsm: fix send_handover_performed() using wrong lchan

send_handover_performed() is called from handover_end() before
gscon_change_primary_lchan() updates conn->lchan to the new lchan.
As a result, the Cell Identifier, Chosen Channel, Chosen Encryption
Algorithm, and Speech Version/Codec IEs were all populated from the
source (old) lchan rather than the target (new) lchan.

As per 3GPP TS 48.008 §3.2.1.25, HANDOVER PERFORMED must report the
target cell and channel.  For intra-BSC handover to a different BTS
this caused the MSC to receive the wrong Cell Identifier.

Fix by initialising lchan from ho->new_lchan instead of conn->lchan,
and deriving the BTS via lchan->ts->trx->bts.

Change-Id: I4111351dc38fc2dbe844c2bd07b3ecfaaadd864e
Related: osmo-ttcn3-hacks.git I82aadcc3a80c183cb93522b829071294b156a218
Found-By: Claude Sonnet 4.6
Vadim Yanitskiy at

#21434 (Apr 6, 2026, 2:43:51 PM)

ipaccess: store Supported Features IE to the MO state

Change-Id: Ic89d42c478677ffda4d544f461e7850dd3157040
Related: OS#6324
Vadim Yanitskiy at