Skip to content

Loading builds...

Changes

#20892 (Mar 13, 2026, 8:29:00 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
- Keep original modulateBurstLaurent() as fallback
- 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

#20891 (Mar 13, 2026, 8:29:00 PM)

proto_trxd: add helpers to prepare burst indication packets

- introduce trxd_prepare_burst_ind_v0() and trxd_prepare_burst_ind_v1()
- reuse prepared packet size in send helpers
- handle idle frames during packet preparation
- use ssize_t consistently for prepared/write sizes

Change-Id: Ie94a1df4879cbf6056cd05c9621c46db1ed972fd
dtv.comp at

#20890 (Mar 13, 2026, 8:28:59 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
- Keep original modulateBurstLaurent() as fallback
- 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

#20889 (Mar 13, 2026, 8:28:59 PM)

proto_trxd: add helpers to prepare burst indication packets

- introduce trxd_prepare_burst_ind_v0() and trxd_prepare_burst_ind_v1()
- reuse prepared packet size in send helpers
- handle idle frames during packet preparation
- use ssize_t consistently for prepared/write sizes

Change-Id: Ie94a1df4879cbf6056cd05c9621c46db1ed972fd
dtv.comp at

#20888 (Mar 13, 2026, 8:01:09 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
- Keep original modulateBurstLaurent() as fallback
- 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

#20887 (Mar 13, 2026, 8:01:08 PM)

proto_trxd: add helpers to prepare burst indication packets

- introduce trxd_prepare_burst_ind_v0() and trxd_prepare_burst_ind_v1()
- reuse prepared packet size in send helpers
- handle idle frames during packet preparation
- use ssize_t consistently for prepared/write sizes

Change-Id: Ie94a1df4879cbf6056cd05c9621c46db1ed972fd
dtv.comp at

#20886 (Mar 13, 2026, 8:01:03 PM)

proto_trxd: add helpers to prepare burst indication packets

- introduce trxd_prepare_burst_ind_v0() and trxd_prepare_burst_ind_v1()
- reuse prepared packet size in send helpers
- handle idle frames during packet preparation
- use ssize_t consistently for prepared/write sizes

Change-Id: Ie94a1df4879cbf6056cd05c9621c46db1ed972fd
dtv.comp at

#20885 (Mar 13, 2026, 8:00:59 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
- Keep original modulateBurstLaurent() as fallback
- 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

#20884 (Mar 13, 2026, 8:00:53 PM)

enb_proxy: fix stale SCTP events misprocessed during MME pool selection

When closing a connection to one MME and opening a new one to the next,
a SHUTDOWN_COMP event from the old (now-closed) socket can still be
pending in the process mailbox.  The sctp_assoc_change handlers in the
'connecting' and 'wait_s1setup_rsp' states were matching '_Socket',
ignoring the socket identity.  A stale SHUTDOWN_COMP would therefore
fall into the '_ -> repeat_state_and_data' branch, triggering a spurious
re-entry of 'connecting', which immediately closed the newly established
connection to the next MME and skipped to yet another pool entry.

Fix this by matching the Socket against the current S#state.sock in both
handlers.  Events arriving on a previously closed socket no longer match
these clauses and are silently dropped by the catch-all handle_event/4.

This was found thanks to the MME pooling TCs in ttcn3-s1gw-test.

Change-Id: I4211dd343607f045cf4dd33fa568ed580c79dd9f
Related: SYS#7052
Vadim Yanitskiy at

#20883 (Mar 13, 2026, 8:00:47 PM)

enb_proxy: fix stale SCTP events misprocessed during MME pool selection

When closing a connection to one MME and opening a new one to the next,
a SHUTDOWN_COMP event from the old (now-closed) socket can still be
pending in the process mailbox.  The sctp_assoc_change handlers in the
'connecting' and 'wait_s1setup_rsp' states were matching '_Socket',
ignoring the socket identity.  A stale SHUTDOWN_COMP would therefore
fall into the '_ -> repeat_state_and_data' branch, triggering a spurious
re-entry of 'connecting', which immediately closed the newly established
connection to the next MME and skipped to yet another pool entry.

Fix this by matching the Socket against the current S#state.sock in both
handlers.  Events arriving on a previously closed socket no longer match
these clauses and are silently dropped by the catch-all handle_event/4.

This was found thanks to the MME pooling TCs in ttcn3-s1gw-test.

Change-Id: I4211dd343607f045cf4dd33fa568ed580c79dd9f
Related: SYS#7052
Vadim Yanitskiy at

#20882 (Mar 13, 2026, 5:44:12 PM)

osmo_io: Rewrite iofd_handle_send_completion() to fix multiple issues

Previous implementation had multiple issues, which this patch addresses:
* Didn't call user cb updating completed bytes for a given msg which had
  a partial write.
* rc checks against "Incomplete write" were wrong, because rc was not
  being decremented with previous msgs idxs being processed.
* Didn't take into account the write(0, fd, buf) = 0 valid user case for
  regular files.

The rewrite also simplifies the logic by splitting the "rc < 0" (error) paths
from the "rc >= 0" (successful) paths.

Related: SYS#7842
Change-Id: Ia016e4df7be5e534a8212f7271caff9779e08eb1
Pau Espin Pedrol at

#20881 (Mar 13, 2026, 5:44:10 PM)

osmo_io: Rewrite iofd_handle_send_completion() to fix multiple issues

Previous implementation had multiple issues, which this patch addresses:
* Didn't call user cb updating completed bytes for a given msg which had
  a partial write.
* rc checks against "Incomplete write" were wrong, because rc was not
  being decremented with previous msgs idxs being processed.
* Didn't take into account the write(0, fd, buf) = 0 valid user case for
  regular files.

The rewrite also simplifies the logic by splitting the "rc < 0" (error) paths
from the "rc >= 0" (successful) paths.

Related: SYS#7842
Change-Id: Ia016e4df7be5e534a8212f7271caff9779e08eb1
Pau Espin Pedrol at

#20880 (Mar 13, 2026, 5:44:10 PM)

osmo_io: Rewrite iofd_handle_send_completion() to fix multiple issues

Previous implementation had multiple issues, which this patch addresses:
* Didn't call user cb updating completed bytes for a given msg which had
  a partial write.
* rc checks against "Incomplete write" were wrong, because rc was not
  being decremented with previous msgs idxs being processed.
* Didn't take into account the write(0, fd, buf) = 0 valid user case for
  regular files.

The rewrite also simplifies the logic by splitting the "rc < 0" (error) paths
from the "rc >= 0" (successful) paths.

Related: SYS#7842
Change-Id: Ia016e4df7be5e534a8212f7271caff9779e08eb1
Pau Espin Pedrol at

#20879 (Mar 13, 2026, 2:15:14 PM)

enb_proxy: add initial MME pooling support

Rework the CONNECTING state to dynamically select an MME from the pool
via mme_registry:mme_select/1, passing the eNB's Tracking Area Codes
(from the ?'id-SupportedTAs' IE of the S1 SETUP REQUEST) and a list of
already-tried MMEs, so successive attempts pick a different candidate.

On connection failure (SCTP establishment timeout or error), or when the
selected MME rejects the S1 SETUP REQUEST or fails to respond in time,
the FSM re-enters the CONNECTING state rather than terminating.  This
triggers another mme_select/1 call with the failed MME added to the
tried_mmes list.  S1 SETUP FAILURE PDUs from the MME are intentionally
not forwarded to the eNB, so the retry is fully transparent.

Once mme_select/1 exhausts all candidates it returns 'error'; at that
point the FSM builds and sends an S1 SETUP FAILURE PDU to the eNB and
terminates.

Other changes:
* add close_sock/1, close_conn/1 helpers; simplify terminate/3
* add ?S1GW_CTR_ENB_PROXY_MME_SELECT_ERROR counter

Change-Id: I83dc4a78c78a7b87e87f5ca9a941a168d6c1dc36
Related: SYS#7052
Vadim Yanitskiy at

#20878 (Mar 13, 2026, 2:15:13 PM)

mme_registry: add backwards compat for old sctp_client config

When 'mme_pool' is absent from the config, automatically populate the
MME pool with a single 'default' entry derived from the 'sctp_client'
section (including legacy mme_loc_addr/mme_rem_addr params), and emit
a deprecation warning.  osmo_s1gw_sup:init/1 normalises 'sctp_client'
in the app env (with all defaults applied) before children start, so
mme_registry can safely read it without duplicating the parsing logic.

Change-Id: Ia97fb61bbb5ace6f43d1a6768fb5fb6883158532
Related: SYS#7052
Vadim Yanitskiy at

#20877 (Mar 13, 2026, 2:15:09 PM)

enb_proxy: add initial MME pooling support

Rework the CONNECTING state to dynamically select an MME from the pool
via mme_registry:mme_select/1, passing the eNB's Tracking Area Codes
(from the ?'id-SupportedTAs' IE of the S1 SETUP REQUEST) and a list of
already-tried MMEs, so successive attempts pick a different candidate.

On connection failure (SCTP establishment timeout or error), or when the
selected MME rejects the S1 SETUP REQUEST or fails to respond in time,
the FSM re-enters the CONNECTING state rather than terminating.  This
triggers another mme_select/1 call with the failed MME added to the
tried_mmes list.  S1 SETUP FAILURE PDUs from the MME are intentionally
not forwarded to the eNB, so the retry is fully transparent.

Once mme_select/1 exhausts all candidates it returns 'error'; at that
point the FSM builds and sends an S1 SETUP FAILURE PDU to the eNB and
terminates.

Other changes:
* add close_sock/1, close_conn/1 helpers; simplify terminate/3
* add ?S1GW_CTR_ENB_PROXY_MME_SELECT_ERROR counter

Change-Id: I83dc4a78c78a7b87e87f5ca9a941a168d6c1dc36
Related: SYS#7052
Vadim Yanitskiy at

#20876 (Mar 13, 2026, 2:15:09 PM)

mme_registry: add backwards compat for old sctp_client config

When 'mme_pool' is absent from the config, automatically populate the
MME pool with a single 'default' entry derived from the 'sctp_client'
section (including legacy mme_loc_addr/mme_rem_addr params), and emit
a deprecation warning.  osmo_s1gw_sup:init/1 normalises 'sctp_client'
in the app env (with all defaults applied) before children start, so
mme_registry can safely read it without duplicating the parsing logic.

Change-Id: Ia97fb61bbb5ace6f43d1a6768fb5fb6883158532
Related: SYS#7052
Vadim Yanitskiy at

#20875 (Mar 13, 2026, 8:58:26 AM)

Fix lint errors: don't use star imports

tests/test_tlv.py:21:1: F403 `from osmocom.tlv import *` used; unable to detect undefined names
   |
19 | import unittest
20 | from construct import Int8ub, GreedyBytes
21 | from osmocom.tlv import *
   | ^^^^^^^^^^^^^^^^^^^^^^^^^ F403
22 | from osmocom.utils import h2b

Change-Id: I0ca76a40d47f72635682de9303ff73e9b2197266
Oliver Smith at

#20874 (Mar 13, 2026, 8:58:24 AM)

Fix lint errors: don't use star imports

tests/test_tlv.py:21:1: F403 `from osmocom.tlv import *` used; unable to detect undefined names
   |
19 | import unittest
20 | from construct import Int8ub, GreedyBytes
21 | from osmocom.tlv import *
   | ^^^^^^^^^^^^^^^^^^^^^^^^^ F403
22 | from osmocom.utils import h2b

Change-Id: I0ca76a40d47f72635682de9303ff73e9b2197266
Oliver Smith at

#20873 (Mar 11, 2026, 2:09:50 PM)

build: add --disable-multi-arfcn configure option

- add configure flag to disable Multi ARFCN support
- compile Channelizer, Synthesis, RadioInterfaceMulti and fft.c only when enabled
- guard Multi ARFCN-specific code with ENABLE_MULTI_ARFCN
- avoid requiring fftw3f when Multi ARFCN support is disabled

Change-Id: I2495c5b5c79f2fe74bef83902058e1d2207c1f3c
dtv.comp at

#20872 (Mar 11, 2026, 2:09:50 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
- Keep original modulateBurstLaurent() as fallback
- 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

#20871 (Mar 11, 2026, 2:09:47 PM)

build: add --disable-multi-arfcn configure option

- add configure flag to disable Multi ARFCN support
- compile Channelizer, Synthesis, RadioInterfaceMulti and fft.c only when enabled
- guard Multi ARFCN-specific code with ENABLE_MULTI_ARFCN
- avoid requiring fftw3f when Multi ARFCN support is disabled

Change-Id: I2495c5b5c79f2fe74bef83902058e1d2207c1f3c
dtv.comp at

#20870 (Mar 11, 2026, 2:09:47 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
- Keep original modulateBurstLaurent() as fallback
- 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

#20869 (Mar 11, 2026, 11:27:27 AM)

build: add --disable-multi-arfcn configure option

- add configure flag to disable Multi ARFCN support
- compile Channelizer, Synthesis, RadioInterfaceMulti and fft.c only when enabled
- guard Multi ARFCN-specific code with ENABLE_MULTI_ARFCN
- avoid requiring fftw3f when Multi ARFCN support is disabled

Change-Id: I2495c5b5c79f2fe74bef83902058e1d2207c1f3c
dtv.comp at

#20868 (Mar 11, 2026, 11:27:23 AM)

build: add --disable-multi-arfcn configure option

- add configure flag to disable Multi ARFCN support
- compile Channelizer, Synthesis, RadioInterfaceMulti and fft.c only when enabled
- guard Multi ARFCN-specific code with ENABLE_MULTI_ARFCN
- avoid requiring fftw3f when Multi ARFCN support is disabled

Change-Id: I2495c5b5c79f2fe74bef83902058e1d2207c1f3c
dtv.comp at

#20867 (Mar 11, 2026, 11:27:23 AM)

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
- Keep original modulateBurstLaurent() as fallback
- 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

#20866 (Mar 11, 2026, 11:27:20 AM)

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
- Keep original modulateBurstLaurent() as fallback
- 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

#20865 (Mar 11, 2026, 11:00:35 AM)

build: add --disable-multi-arfcn configure option

- add configure flag to disable Multi ARFCN support
- compile Channelizer, Synthesis, RadioInterfaceMulti and fft.c only when enabled
- guard Multi ARFCN-specific code with ENABLE_MULTI_ARFCN
- avoid requiring fftw3f when Multi ARFCN support is disabled

Change-Id: I2495c5b5c79f2fe74bef83902058e1d2207c1f3c
dtv.comp at

#20864 (Mar 11, 2026, 11:00:35 AM)

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
- Keep original modulateBurstLaurent() as fallback
- 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

#20863 (Mar 11, 2026, 11:00:35 AM)

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
- Keep original modulateBurstLaurent() as fallback
- 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

#20862 (Mar 11, 2026, 11:00:34 AM)

build: add --disable-multi-arfcn configure option

- add configure flag to disable Multi ARFCN support
- compile Channelizer, Synthesis, RadioInterfaceMulti and fft.c only when enabled
- guard Multi ARFCN-specific code with ENABLE_MULTI_ARFCN
- avoid requiring fftw3f when Multi ARFCN support is disabled

Change-Id: I2495c5b5c79f2fe74bef83902058e1d2207c1f3c
dtv.comp at

#20861 (Mar 11, 2026, 12:35:25 AM)

build: add --disable-multi-arfcn configure option

- add configure flag to disable Multi ARFCN support
- compile Channelizer, Synthesis, RadioInterfaceMulti and fft.c only when enabled
- guard Multi ARFCN-specific code with ENABLE_MULTI_ARFCN
- avoid requiring fftw3f when Multi ARFCN support is disabled

Change-Id: I2495c5b5c79f2fe74bef83902058e1d2207c1f3c
dtv.comp at

#20860 (Mar 11, 2026, 12:35:25 AM)

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
- Keep original modulateBurstLaurent() as fallback
- 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

#20859 (Mar 11, 2026, 12:35:24 AM)

build: add --disable-multi-arfcn configure option

- add configure flag to disable Multi ARFCN support
- compile Channelizer, Synthesis, RadioInterfaceMulti and fft.c only when enabled
- guard Multi ARFCN-specific code with ENABLE_MULTI_ARFCN
- avoid requiring fftw3f when Multi ARFCN support is disabled

Change-Id: I2495c5b5c79f2fe74bef83902058e1d2207c1f3c
dtv.comp at

#20858 (Mar 11, 2026, 12:35:23 AM)

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
- Keep original modulateBurstLaurent() as fallback
- 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

#20857 (Mar 11, 2026, 12:22:38 AM)

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
- Keep original modulateBurstLaurent() as fallback
- 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

#20856 (Mar 11, 2026, 12:22:38 AM)

build: add --disable-multi-arfcn configure option

- add configure flag to disable Multi ARFCN support
- compile Channelizer, Synthesis, RadioInterfaceMulti and fft.c only when enabled
- guard Multi ARFCN-specific code with ENABLE_MULTI_ARFCN
- avoid requiring fftw3f when Multi ARFCN support is disabled

Change-Id: I2495c5b5c79f2fe74bef83902058e1d2207c1f3c
dtv.comp at

#20855 (Mar 11, 2026, 12:22:35 AM)

build: add --disable-multi-arfcn configure option

- add configure flag to disable Multi ARFCN support
- compile Channelizer, Synthesis, RadioInterfaceMulti and fft.c only when enabled
- guard Multi ARFCN-specific code with ENABLE_MULTI_ARFCN
- avoid requiring fftw3f when Multi ARFCN support is disabled

Change-Id: I2495c5b5c79f2fe74bef83902058e1d2207c1f3c
dtv.comp at

#20854 (Mar 11, 2026, 12:22:35 AM)

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
- Keep original modulateBurstLaurent() as fallback
- 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

#20853 (Mar 10, 2026, 4:27:57 PM)

core: fix config.h

While exploring why logging is disabled but still shows up in the binaries
I kind of wondered how all the config.h HAVE_XX checks we have everwhere work.
Apparently they do not work at all, due to missing or misplaced include of config.h.

This affects tons of other checks as well.

The jenkins hook ensures the include order is checked to ensure config.h
does not get misplaced or lost in the future.

Change-Id: Ic2cf52a3b60f43a2f5d3fe01c41a41f6fd9a8000
ewild at

#20852 (Mar 10, 2026, 4:27:57 PM)

core: fix config.h

While exploring why logging is disabled but still shows up in the binaries
I kind of wondered how all the config.h HAVE_XX checks we have everwhere work.
Apparently they do not work at all, due to missing or misplaced include of config.h.

This affects tons of other checks as well.

The jenkins hook ensures the include order is checked to ensure config.h
does not get misplaced or lost in the future.

Change-Id: Ic2cf52a3b60f43a2f5d3fe01c41a41f6fd9a8000
ewild at

#20851 (Mar 10, 2026, 4:27:53 PM)

core: fix config.h

While exploring why logging is disabled but still shows up in the binaries
I kind of wondered how all the config.h HAVE_XX checks we have everwhere work.
Apparently they do not work at all, due to missing or misplaced include of config.h.

This affects tons of other checks as well.

The jenkins hook ensures the include order is checked to ensure config.h
does not get misplaced or lost in the future.

Change-Id: Ic2cf52a3b60f43a2f5d3fe01c41a41f6fd9a8000
ewild at

#20850 (Mar 10, 2026, 4:11:34 PM)

core: fix config.h

While exploring why logging is disabled but still shows up in the binaries
I kind of wondered how all the config.h HAVE_XX checks we have everwhere work.
Apparently they do not work at all, due to missing or misplaced include of config.h.

This affects tons of other checks as well.

The jenkins hook ensures the include order is checked to ensure config.h
does not get misplaced or lost in the future.

Change-Id: Ic2cf52a3b60f43a2f5d3fe01c41a41f6fd9a8000
ewild at

#20849 (Mar 10, 2026, 4:11:32 PM)

core: fix config.h

While exploring why logging is disabled but still shows up in the binaries
I kind of wondered how all the config.h HAVE_XX checks we have everwhere work.
Apparently they do not work at all, due to missing or misplaced include of config.h.

This affects tons of other checks as well.

The jenkins hook ensures the include order is checked to ensure config.h
does not get misplaced or lost in the future.

Change-Id: Ic2cf52a3b60f43a2f5d3fe01c41a41f6fd9a8000
ewild at

#20848 (Mar 10, 2026, 4:11:32 PM)

core: fix config.h

While exploring why logging is disabled but still shows up in the binaries
I kind of wondered how all the config.h HAVE_XX checks we have everwhere work.
Apparently they do not work at all, due to missing or misplaced include of config.h.

This affects tons of other checks as well.

The jenkins hook ensures the include order is checked to ensure config.h
does not get misplaced or lost in the future.

Change-Id: Ic2cf52a3b60f43a2f5d3fe01c41a41f6fd9a8000
ewild at

#20847 (Mar 10, 2026, 1:36:13 PM)

sane embedded builds without host talloc

So far host talloc was always required.
This fixes this up to only build a subset of stuff
that actually works for embedded targets while
using the pseudotalloc header file, and the actual
firmware can supply its own talloc, without
involving some random build system supplied talloc
headers.

Unfortunately static symbols can't really be weak,
so just going for always-on weak pseudotalloc does
not work.

Change-Id: Ibb309a01ac6cad827b33ac18be408be1ac2cf7e0
ewild at

#20846 (Mar 10, 2026, 1:36:13 PM)

sane embedded builds without host talloc

So far host talloc was always required.
This fixes this up to only build a subset of stuff
that actually works for embedded targets while
using the pseudotalloc header file, and the actual
firmware can supply its own talloc, without
involving some random build system supplied talloc
headers.

Unfortunately static symbols can't really be weak,
so just going for always-on weak pseudotalloc does
not work.

Change-Id: Ibb309a01ac6cad827b33ac18be408be1ac2cf7e0
ewild at

#20845 (Mar 10, 2026, 1:36:11 PM)

sane embedded builds without host talloc

So far host talloc was always required.
This fixes this up to only build a subset of stuff
that actually works for embedded targets while
using the pseudotalloc header file, and the actual
firmware can supply its own talloc, without
involving some random build system supplied talloc
headers.

Unfortunately static symbols can't really be weak,
so just going for always-on weak pseudotalloc does
not work.

Change-Id: Ibb309a01ac6cad827b33ac18be408be1ac2cf7e0
ewild at

#20844 (Mar 9, 2026, 7:32:41 PM)

feat(usdr): add USDR backend support (osmo-trx-usdr)

- Implement USDRDevice backend for Transceiver52M
- Add --with-usdr configure option and build integration
- Add systemd service unit (osmo-trx-usdr.service)
- Add Debian packaging files for osmo-trx-usdr
- Provide example configuration file
- Extend manuals and device documentation with USDR backend section

Change-Id: I5d1d25921514954c4929ae6e7352168b3ceb05df
dtv.comp at

#20843 (Mar 9, 2026, 7:32:40 PM)

feat(usdr): add USDR backend support (osmo-trx-usdr)

- Implement USDRDevice backend for Transceiver52M
- Add --with-usdr configure option and build integration
- Add systemd service unit (osmo-trx-usdr.service)
- Add Debian packaging files for osmo-trx-usdr
- Provide example configuration file
- Extend manuals and device documentation with USDR backend section

Change-Id: I5d1d25921514954c4929ae6e7352168b3ceb05df
dtv.comp at

#20842 (Mar 9, 2026, 7:21:26 PM)

feat(usdr): add USDR backend support (osmo-trx-usdr)

- Implement USDRDevice backend for Transceiver52M
- Add --with-usdr configure option and build integration
- Add systemd service unit (osmo-trx-usdr.service)
- Add Debian packaging files for osmo-trx-usdr
- Provide example configuration file
- Extend manuals and device documentation with USDR backend section

Change-Id: I5d1d25921514954c4929ae6e7352168b3ceb05df
dtv.comp at

#20841 (Mar 9, 2026, 7:21:25 PM)

radio: improve API documentation in RadioDevice

Change-Id: I7b41c549d743ad180a1ddcd8c0313e1003860070
dtv.comp at

#20840 (Mar 9, 2026, 7:21:24 PM)

feat(usdr): add USDR backend support (osmo-trx-usdr)

- Implement USDRDevice backend for Transceiver52M
- Add --with-usdr configure option and build integration
- Add systemd service unit (osmo-trx-usdr.service)
- Add Debian packaging files for osmo-trx-usdr
- Provide example configuration file
- Extend manuals and device documentation with USDR backend section

Change-Id: I5d1d25921514954c4929ae6e7352168b3ceb05df
dtv.comp at

#20839 (Mar 9, 2026, 7:21:24 PM)

radio: improve API documentation in RadioDevice

Change-Id: I7b41c549d743ad180a1ddcd8c0313e1003860070
dtv.comp at

#20838 (Mar 9, 2026, 5:46:22 PM)

build: install common/GSM/transceiver libraries for emscripten and add pkg-config files

Expose previously internal libs (libcommon, libGSM, libtransceiver_common)
when building with emscripten, install headers and generate .pc files.
Keep them noinst for native builds.

Change-Id: I2495c5b5c79f2fe74bef83902058e1d2207c1f3c
dtv.comp at

#20837 (Mar 9, 2026, 5:46: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
- Keep original modulateBurstLaurent() as fallback
- 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

#20836 (Mar 9, 2026, 5:46:17 PM)

build: install common/GSM/transceiver libraries for emscripten and add pkg-config files

Expose previously internal libs (libcommon, libGSM, libtransceiver_common)
when building with emscripten, install headers and generate .pc files.
Keep them noinst for native builds.

Change-Id: I2495c5b5c79f2fe74bef83902058e1d2207c1f3c
dtv.comp at

#20835 (Mar 9, 2026, 5:46:16 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
- Keep original modulateBurstLaurent() as fallback
- 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

#20834 (Mar 9, 2026, 5:38:52 PM)

radio: improve API documentation in RadioDevice

Change-Id: I7b41c549d743ad180a1ddcd8c0313e1003860070
dtv.comp at

#20833 (Mar 9, 2026, 5:38:52 PM)

feat(usdr): add USDR backend support (osmo-trx-usdr)

- Implement USDRDevice backend for Transceiver52M
- Add --with-usdr configure option and build integration
- Add systemd service unit (osmo-trx-usdr.service)
- Add Debian packaging files for osmo-trx-usdr
- Provide example configuration file
- Extend manuals and device documentation with USDR backend section

Change-Id: I5d1d25921514954c4929ae6e7352168b3ceb05df
dtv.comp at

#20832 (Mar 9, 2026, 5:38:47 PM)

radio: improve API documentation in RadioDevice

Change-Id: I7b41c549d743ad180a1ddcd8c0313e1003860070
dtv.comp at

#20831 (Mar 9, 2026, 5:38:46 PM)

feat(usdr): add USDR backend support (osmo-trx-usdr)

- Implement USDRDevice backend for Transceiver52M
- Add --with-usdr configure option and build integration
- Add systemd service unit (osmo-trx-usdr.service)
- Add Debian packaging files for osmo-trx-usdr
- Provide example configuration file
- Extend manuals and device documentation with USDR backend section

Change-Id: I5d1d25921514954c4929ae6e7352168b3ceb05df
dtv.comp at

#20830 (Mar 9, 2026, 11:44:30 AM)

bankd: Avoid osmocom logging mutex deadlock in signal handling

The main thread communicates slotmap add + delete via POSIX signals
to the worker threads.  As those signals interrupt the normal
processing of the worker thread, they might get delivered while the
thread is already logging something, causing a deadlock.  This has
been observed in the real world in the following stack trace (where it's
actually two nested signals):

As a hot-fix, let's avoid logging from the handle_sig_map{del,add}()
functions at all, making them safe against a deadlock around this mutex.

We should decide how to proceed in general with potentially some
architectural changes later on; any such changes are not suitable as a
hot fix due to their potential of introducing other regressions.

Change-Id: I5ea32886dfaf624b4dc5ad7924941c7b904c1d36
Related: SYS#7930
laforge at

#20829 (Mar 9, 2026, 11:44:25 AM)

bankd: Avoid osmocom logging mutex deadlock in signal handling

The main thread communicates slotmap add + delete via POSIX signals
to the worker threads.  As those signals interrupt the normal
processing of the worker thread, they might get delivered while the
thread is already logging something, causing a deadlock.  This has
been observed in the real world in the following stack trace (where it's
actually two nested signals):

As a hot-fix, let's avoid logging from the handle_sig_map{del,add}()
functions at all, making them safe against a deadlock around this mutex.

We should decide how to proceed in general with potentially some
architectural changes later on; any such changes are not suitable as a
hot fix due to their potential of introducing other regressions.

Change-Id: I5ea32886dfaf624b4dc5ad7924941c7b904c1d36
Related: SYS#7930
laforge at

#20828 (Mar 6, 2026, 9:54:34 PM)

s1ap_utils_test: fix: expected value goes first

Change-Id: Ib7c6478b95a78c9797e86180a89c098e75b615e0
Vadim Yanitskiy at

#20827 (Mar 6, 2026, 9:54:29 PM)

[REST] Add MmeList, MmeAdd, MmeInfo, MmeDelete

Change-Id: Iad249aed99face9e35fd19e0596cf2364ade4c77
Related: SYS#7052
Vadim Yanitskiy at

#20826 (Mar 6, 2026, 9:54:29 PM)

enb_proxy: add initial MME pooling support

Rework the CONNECTING state to dynamically select an MME from the pool
via mme_registry:mme_select/1, passing the eNB's Tracking Area Codes
(from the ?'id-SupportedTAs' IE of the S1 SETUP REQUEST) and a list of
already-tried MMEs, so successive attempts pick a different candidate.

On connection failure (SCTP establishment timeout or error), or when the
selected MME rejects the S1 SETUP REQUEST or fails to respond in time,
the FSM re-enters the CONNECTING state rather than terminating.  This
triggers another mme_select/1 call with the failed MME added to the
tried_mmes list.  S1 SETUP FAILURE PDUs from the MME are intentionally
not forwarded to the eNB, so the retry is fully transparent.

Once mme_select/1 exhausts all candidates it returns 'error'; at that
point the FSM builds and sends an S1 SETUP FAILURE PDU to the eNB and
terminates.

Other changes:
* add close_sock/1, close_conn/1 helpers; simplify terminate/3
* add ?S1GW_CTR_ENB_PROXY_MME_SELECT_ERROR counter

Change-Id: I83dc4a78c78a7b87e87f5ca9a941a168d6c1dc36
Related: SYS#7052
Vadim Yanitskiy at

#20825 (Mar 6, 2026, 9:54:29 PM)

s1ap_utils: add API for building S1 SETUP FAILURE PDU

This API will be used in a follow-up patch adding the MME pooling.
Take a chance to add a parsing test for the new PDU blob.

Change-Id: I5a4e060e0a2ebdfbcfafac42f9de2e49ac3583b8
Related: SYS#7052
Vadim Yanitskiy at

#20824 (Mar 6, 2026, 9:54:28 PM)

mme_registry: the MME registry (pool) implementation

Change-Id: Id5480222439bf93eca2e994b291c619dff823b01
Related: SYS#7052
Vadim Yanitskiy at

#20823 (Mar 6, 2026, 9:54:28 PM)

s1ap_utils_test: fix: expected value goes first

Change-Id: Ib7c6478b95a78c9797e86180a89c098e75b615e0
Vadim Yanitskiy at

#20822 (Mar 6, 2026, 9:54:27 PM)

enb_proxy: add initial MME pooling support

Rework the CONNECTING state to dynamically select an MME from the pool
via mme_registry:mme_select/1, passing the eNB's Tracking Area Codes
(from the ?'id-SupportedTAs' IE of the S1 SETUP REQUEST) and a list of
already-tried MMEs, so successive attempts pick a different candidate.

On connection failure (SCTP establishment timeout or error), or when the
selected MME rejects the S1 SETUP REQUEST or fails to respond in time,
the FSM re-enters the CONNECTING state rather than terminating.  This
triggers another mme_select/1 call with the failed MME added to the
tried_mmes list.  S1 SETUP FAILURE PDUs from the MME are intentionally
not forwarded to the eNB, so the retry is fully transparent.

Once mme_select/1 exhausts all candidates it returns 'error'; at that
point the FSM builds and sends an S1 SETUP FAILURE PDU to the eNB and
terminates.

Other changes:
* add close_sock/1, close_conn/1 helpers; simplify terminate/3
* add ?S1GW_CTR_ENB_PROXY_MME_SELECT_ERROR counter

Change-Id: I83dc4a78c78a7b87e87f5ca9a941a168d6c1dc36
Related: SYS#7052
Vadim Yanitskiy at

#20821 (Mar 6, 2026, 9:54:27 PM)

[REST] Add MmeList, MmeAdd, MmeInfo, MmeDelete

Change-Id: Iad249aed99face9e35fd19e0596cf2364ade4c77
Related: SYS#7052
Vadim Yanitskiy at

#20820 (Mar 6, 2026, 9:54:26 PM)

mme_registry: the MME registry (pool) implementation

Change-Id: Id5480222439bf93eca2e994b291c619dff823b01
Related: SYS#7052
Vadim Yanitskiy at

#20819 (Mar 6, 2026, 9:54:26 PM)

s1ap_utils: add API for building S1 SETUP FAILURE PDU

This API will be used in a follow-up patch adding the MME pooling.
Take a chance to add a parsing test for the new PDU blob.

Change-Id: I5a4e060e0a2ebdfbcfafac42f9de2e49ac3583b8
Related: SYS#7052
Vadim Yanitskiy at

#20818 (Mar 6, 2026, 9:33:26 PM)

enb_registry: rework handling of eNB property updates

The idea of an enb_event/0 containing the current MME connection
state and the associated information (Global-eNB-ID, eNB/MME conn
info) looked promising initially, however turned out to be
impractical in light of ongoing MME pooling related changes.

* remove type enb_state/0
* rename type enb_event/0 -> enb_prop/0
* rename function enb_event/2 -> enb_update/2 (now private)
* enb_prop/0: separate the state from other properties
* enb_update/2: accept a list of enb_prop/0 - enb_proplist/0
* add typed notify_*() helpers that group related property updates,
  ensuring consistency and serving as the sole public call sites
* notify_mme_connecting(): explicitly clears mme_conn_info
* openapi: EnbItem.state reflects the actual enb_proxy FSM state

Change-Id: Ib5c5dedce729151cd7350390987fdd008b254ef4
Related: SYS#7052
Vadim Yanitskiy at

#20817 (Mar 6, 2026, 9:33:22 PM)

enb_registry: rework handling of eNB property updates

The idea of an enb_event/0 containing the current MME connection
state and the associated information (Global-eNB-ID, eNB/MME conn
info) looked promising initially, however turned out to be
impractical in light of ongoing MME pooling related changes.

* remove type enb_state/0
* rename type enb_event/0 -> enb_prop/0
* rename function enb_event/2 -> enb_update/2 (now private)
* enb_prop/0: separate the state from other properties
* enb_update/2: accept a list of enb_prop/0 - enb_proplist/0
* add typed notify_*() helpers that group related property updates,
  ensuring consistency and serving as the sole public call sites
* notify_mme_connecting(): explicitly clears mme_conn_info
* openapi: EnbItem.state reflects the actual enb_proxy FSM state

Change-Id: Ib5c5dedce729151cd7350390987fdd008b254ef4
Related: SYS#7052
Vadim Yanitskiy at

#20816 (Mar 6, 2026, 9:28:24 PM)

enb_registry: rework handling of eNB property updates

The idea of an enb_event/0 containing the current MME connection
state and the associated information (Global-eNB-ID, eNB/MME conn
info) looked promising initially, however turned out to be
impractical in light of ongoing MME pooling related changes.

* remove type enb_state/0
* rename type enb_event/0 -> enb_prop/0
* rename function enb_event/2 -> enb_update/2 (now private)
* enb_prop/0: separate the state from other properties
* enb_update/2: accept a list of enb_prop/0 - enb_proplist/0
* add typed notify_*() helpers that group related property updates,
  ensuring consistency and serving as the sole public call sites
* notify_mme_connecting(): explicitly clears mme_conn_info
* openapi: EnbItem.state reflects the actual enb_proxy FSM state

Change-Id: Ib5c5dedce729151cd7350390987fdd008b254ef4
Related: SYS#7052
Vadim Yanitskiy at

#20815 (Mar 6, 2026, 9:28:24 PM)

enb_registry: fix pattern match in handle_info 'DOWN' handler

PIDs maps pid() => enb_handle() (an integer), so maps:find/2 returns
{ok, SomeHandle}.  The old pattern {ok, Pid} tried to match an integer
against the already-bound pid() variable, which never succeeds.

This handler is only called on abnormal termination (process crash),
so the broken match caused the registry entry to never be cleaned up
in that case.  Fix by using a fresh {ok, Handle} binding and removing
the now-redundant follow-up maps:get/2 call.

Change-Id: I4cb044e8071c4ae2fc48c507f8733af6c617ec46
Vadim Yanitskiy at

#20814 (Mar 6, 2026, 9:28:24 PM)

enb_registry: fix duplicate registration check in enb_register/0

next_handle was bound in the function head and reused in the case
pattern {ok, Handle}, turning what looks like a binding into an
equality test against next_handle.  The duplicate check therefore
only fired if the previously assigned handle happened to equal the
current next_handle counter, which is essentially never true.

Fix by removing next_handle from the function head pattern and reading
it with S#state.next_handle inside the error branch, so that Handle in
{ok, Handle} is always a fresh binding that matches any existing handle.

Change-Id: Ia64f3e2e79bea055e5c37df9bce91a4bcbf7184c
Vadim Yanitskiy at

#20813 (Mar 6, 2026, 9:28:06 PM)

erab_fsm: fix comment inaccuracies and a typo

Two comments copy-pasted from session_establish were left saying
"ESTABLISH Req" in session_modify and session_delete handlers where
"MODIFY Req" and "DELETE Req" are correct respectively.
Also fix typo "unieue" -> "unique" in init/1.

Change-Id: If84638142988767363aa080012b44082dee39f90
Vadim Yanitskiy at

#20812 (Mar 6, 2026, 9:28:05 PM)

enb_registry: fix addr/port filter logic (use andalso)

In Erlang a function body returns only its last expression.  The comma
between the two enb_filter_by_sub_field/2 calls caused the result of
the addr check to be silently discarded, so the filter only tested the
port.  Replace the comma with andalso to require both to match.

Change-Id: I8061636cd1077a4f3a9e9d37a31224f5e373becb
Vadim Yanitskiy at

#20811 (Mar 6, 2026, 9:28:03 PM)

pfcp_peer: replace watchdog process with a timer

The watchdog process is spawned bare (no link/monitor), so if it
crashes its failure goes unnoticed, and if pfcp_peer restarts the
orphaned watchdog may fire a stale cast at the new process.

The watchdog process exists solely to send a delayed message to
pfcp_peer on timeout, and to be cancelled (by receiving
heartbeat_response) when the response arrives.  That's exactly what
erlang:start_timer/3 does natively - no separate process needed.

Change-Id: I8d71ad8300feefb0aecbf690a825a2b4e9f1102c
Vadim Yanitskiy at

#20810 (Mar 6, 2026, 9:27:58 PM)

s1ap_proxy: fix discarded result of handle_ies/3 in HO REQ ACK handler

The call processing the optional E-RABFailedToSetupListHOReqAck IE did
not pattern-match its return value, causing any errors returned by
handle_ies/3 to be silently swallowed.  Bind the result to {_, S2}
to make the intent explicit.

Change-Id: I1c8feeb63fe23876ae443784980e9dc22a450c54
Vadim Yanitskiy at

#20809 (Mar 6, 2026, 9:27:57 PM)

pfcp_peer: replace deprecated erlang:timestamp/0 with os:system_time/1

erlang:timestamp/0 is deprecated since OTP 18.  os:system_time(second)
is the modern replacement and yields the result directly in seconds,
removing the need to reassemble the {MegaSec, Sec, _} tuple.

Change-Id: I4ad886a2222f0cee8a668b42efe8bfac800a55ac
Vadim Yanitskiy at

#20808 (Mar 6, 2026, 9:21:43 PM)

enb_registry: call enb_metrics_register/1 from a proper place

Change-Id: I38237463aa9c968f89bf4f195407a18cba7e73c9
Vadim Yanitskiy at

#20807 (Mar 6, 2026, 9:21:32 PM)

pfcp_peer: wrap seq_nr at 24-bit boundary

PFCP sequence numbers are 24-bit (3GPP TS 29.244 section 7.2.2.2), but
the counter was incremented without wrapping, eventually exceeding the
type spec after 16,777,215 requests.  Introduce PFCP_SEQ_NR_MAX and use
it in the type spec and in the increment expression.

Change-Id: Ie269894add9a82c36698320379df3aca3f7ffea8
Vadim Yanitskiy at

#20806 (Mar 6, 2026, 9:21:31 PM)

enb_registry: rework handling of eNB property updates

The idea of an enb_event/0 containing the current MME connection
state and the associated information (Global-eNB-ID, eNB/MME conn
info) looked promising initially, however turned out to be
impractical in light of ongoing MME pooling related changes.

* remove type enb_state/0
* rename type enb_event/0 -> enb_prop/0
* rename function enb_event/2 -> enb_update/2 (now private)
* enb_prop/0: separate the state from other properties
* enb_update/2: accept a list of enb_prop/0 - enb_proplist/0
* add typed notify_*() helpers that group related property updates,
  ensuring consistency and serving as the sole public call sites
* notify_mme_connecting(): explicitly clears mme_conn_info
* openapi: EnbItem.state reflects the actual enb_proxy FSM state

Change-Id: Ib5c5dedce729151cd7350390987fdd008b254ef4
Related: SYS#7052
Vadim Yanitskiy at

#20805 (Mar 6, 2026, 9:21:30 PM)

pfcp_peer: replace watchdog process with a timer

The watchdog process is spawned bare (no link/monitor), so if it
crashes its failure goes unnoticed, and if pfcp_peer restarts the
orphaned watchdog may fire a stale cast at the new process.

The watchdog process exists solely to send a delayed message to
pfcp_peer on timeout, and to be cancelled (by receiving
heartbeat_response) when the response arrives.  That's exactly what
erlang:start_timer/3 does natively - no separate process needed.

Change-Id: I8d71ad8300feefb0aecbf690a825a2b4e9f1102c
Vadim Yanitskiy at

#20804 (Mar 6, 2026, 9:21:29 PM)

erab_fsm: fix comment inaccuracies and a typo

Two comments copy-pasted from session_establish were left saying
"ESTABLISH Req" in session_modify and session_delete handlers where
"MODIFY Req" and "DELETE Req" are correct respectively.
Also fix typo "unieue" -> "unique" in init/1.

Change-Id: If84638142988767363aa080012b44082dee39f90
Vadim Yanitskiy at

#20803 (Mar 6, 2026, 9:21:29 PM)

enb_registry: fix duplicate registration check in enb_register/0

next_handle was bound in the function head and reused in the case
pattern {ok, Handle}, turning what looks like a binding into an
equality test against next_handle.  The duplicate check therefore
only fired if the previously assigned handle happened to equal the
current next_handle counter, which is essentially never true.

Fix by removing next_handle from the function head pattern and reading
it with S#state.next_handle inside the error branch, so that Handle in
{ok, Handle} is always a fresh binding that matches any existing handle.

Change-Id: Ia64f3e2e79bea055e5c37df9bce91a4bcbf7184c
Vadim Yanitskiy at

#20802 (Mar 6, 2026, 9:21:28 PM)

enb_registry: fix addr/port filter logic (use andalso)

In Erlang a function body returns only its last expression.  The comma
between the two enb_filter_by_sub_field/2 calls caused the result of
the addr check to be silently discarded, so the filter only tested the
port.  Replace the comma with andalso to require both to match.

Change-Id: I8061636cd1077a4f3a9e9d37a31224f5e373becb
Vadim Yanitskiy at

#20801 (Mar 6, 2026, 9:21:27 PM)

enb_registry: fix pattern match in handle_info 'DOWN' handler

PIDs maps pid() => enb_handle() (an integer), so maps:find/2 returns
{ok, SomeHandle}.  The old pattern {ok, Pid} tried to match an integer
against the already-bound pid() variable, which never succeeds.

This handler is only called on abnormal termination (process crash),
so the broken match caused the registry entry to never be cleaned up
in that case.  Fix by using a fresh {ok, Handle} binding and removing
the now-redundant follow-up maps:get/2 call.

Change-Id: I4cb044e8071c4ae2fc48c507f8733af6c617ec46
Vadim Yanitskiy at

#20800 (Mar 6, 2026, 9:21:27 PM)

s1ap_proxy: fix discarded result of handle_ies/3 in HO REQ ACK handler

The call processing the optional E-RABFailedToSetupListHOReqAck IE did
not pattern-match its return value, causing any errors returned by
handle_ies/3 to be silently swallowed.  Bind the result to {_, S2}
to make the intent explicit.

Change-Id: I1c8feeb63fe23876ae443784980e9dc22a450c54
Vadim Yanitskiy at

#20799 (Mar 6, 2026, 9:21:26 PM)

pfcp_peer: wrap seq_nr at 24-bit boundary

PFCP sequence numbers are 24-bit (3GPP TS 29.244 section 7.2.2.2), but
the counter was incremented without wrapping, eventually exceeding the
type spec after 16,777,215 requests.  Introduce PFCP_SEQ_NR_MAX and use
it in the type spec and in the increment expression.

Change-Id: Ie269894add9a82c36698320379df3aca3f7ffea8
Vadim Yanitskiy at

#20798 (Mar 6, 2026, 9:21:25 PM)

pfcp_peer: replace deprecated erlang:timestamp/0 with os:system_time/1

erlang:timestamp/0 is deprecated since OTP 18.  os:system_time(second)
is the modern replacement and yields the result directly in seconds,
removing the need to reassemble the {MegaSec, Sec, _} tuple.

Change-Id: I4ad886a2222f0cee8a668b42efe8bfac800a55ac
Vadim Yanitskiy at

#20797 (Mar 6, 2026, 9:21:24 PM)

enb_registry: call enb_metrics_register/1 from a proper place

Change-Id: I38237463aa9c968f89bf4f195407a18cba7e73c9
Vadim Yanitskiy at

#20796 (Mar 6, 2026, 7:40:29 PM)

nokia_site: Change the LAPD N200 counter for RSL

This commit raises the LAPD RSL N200 (retransmission) counter for
Nokia RSL links. The reason is that the readiness of the TRX is not
signalled (OML) nor can be queried from the BTS in any way, and on
larger macro setups the TRX reset takes ~15 seconds, thus the RSL
bootstrap times out before the TRX becomes ready.

This issue presents itself with UltraSite types, does not affect
InSite or MetroSite (the later two are "integrated TRX" units).
More modern macro setups like the Flexi or Multiradio are likely
affected.

Runtime tested with InSite and UltraSite (multi-TRX).

Change-Id: Ie4bb804ea636eba2182586db13a625c5933eff31
metro4 at

#20795 (Mar 6, 2026, 7:40:29 PM)

nokia_site: Change the LAPD N200 counter for RSL

This commit raises the LAPD RSL N200 (retransmission) counter for
Nokia RSL links. The reason is that the readiness of the TRX is not
signalled (OML) nor can be queried from the BTS in any way, and on
larger macro setups the TRX reset takes ~15 seconds, thus the RSL
bootstrap times out before the TRX becomes ready.

This issue presents itself with UltraSite types, does not affect
InSite or MetroSite (the later two are "integrated TRX" units).
More modern macro setups like the Flexi or Multiradio are likely
affected.

Runtime tested with InSite and UltraSite (multi-TRX).

Change-Id: Ie4bb804ea636eba2182586db13a625c5933eff31
metro4 at

#20794 (Mar 6, 2026, 7:31:17 PM)

nokia_site: Change the LAPD N200 counter for RSL

This commit raises the LAPD RSL N200 (retransmission) counter for
Nokia RSL links. The reason is that the readiness of the TRX is not
signalled (OML) nor can be queried from the BTS in any way, and on
larger macro setups the TRX reset takes ~15 seconds, thus the RSL
bootstrap times out before the TRX becomes ready.

This issue presents itself with UltraSite types, does not affect
InSite or MetroSite (the later two are "integrated TRX" units).
More modern macro setups like the Flexi or Multiradio are likely
affected.

Runtime tested with InSite and UltraSite (multi-TRX).

Change-Id: Ie4bb804ea636eba2182586db13a625c5933eff31
metro4 at

#20793 (Mar 6, 2026, 7:31:15 PM)

nokia_site: Change the LAPD N200 counter for RSL

This commit raises the LAPD RSL N200 (retransmission) counter for
Nokia RSL links. The reason is that the readiness of the TRX is not
signalled (OML) nor can be queried from the BTS in any way, and on
larger macro setups the TRX reset takes ~15 seconds, thus the RSL
bootstrap times out before the TRX becomes ready.

This issue presents itself with UltraSite types, does not affect
InSite or MetroSite (the later two are "integrated TRX" units).
More modern macro setups like the Flexi or Multiradio are likely
affected.

Runtime tested with InSite and UltraSite (multi-TRX).

Change-Id: Ie4bb804ea636eba2182586db13a625c5933eff31
metro4 at

#20792 (Mar 6, 2026, 3:40:26 PM)

nokia_site: Change the LAPD N200 counter for RSL

This commit raises the LAPD RSL N200 (retransmission) counter for
Nokia RSL links. The reason is that the readiness of the TRX is not
signalled (OML) nor can be queried from the BTS in any way, and on
larger macro setups the TRX reset takes ~15 seconds, thus the RSL
bootstrap times out before the TRX becomes ready.

This issue presents itself with UltraSite types, does not affect
InSite or MetroSite (the later two are "integrated TRX" units).

Runtime tested with InSite and UltraSite (multi-TRX).

Change-Id: Ie4bb804ea636eba2182586db13a625c5933eff31
metro4 at

#20791 (Mar 6, 2026, 3:40:26 PM)

nokia_site: Add new BTS types to the list

This commit adds Flexi EDGE, Flexi Multiradio and Flexi Multiradio 10
BTS types to the supported device list.

Keep in mind that this was not yet tested as we lack actual HW,
but the OML logic should be the same.

Change-Id: Ie3f1a3c3d7d72a49401d66625516f92cc7384949
metro4 at

#20790 (Mar 6, 2026, 3:40:22 PM)

nokia_site: Change the LAPD N200 counter for RSL

This commit raises the LAPD RSL N200 (retransmission) counter for
Nokia RSL links. The reason is that the readiness of the TRX is not
signalled (OML) nor can be queried from the BTS in any way, and on
larger macro setups the TRX reset takes ~15 seconds, thus the RSL
bootstrap times out before the TRX becomes ready.

This issue presents itself with UltraSite types, does not affect
InSite or MetroSite (the later two are "integrated TRX" units).

Runtime tested with InSite and UltraSite (multi-TRX).

Change-Id: Ie4bb804ea636eba2182586db13a625c5933eff31
metro4 at

#20789 (Mar 6, 2026, 3:40:22 PM)

nokia_site: Add new BTS types to the list

This commit adds Flexi EDGE, Flexi Multiradio and Flexi Multiradio 10
BTS types to the supported device list.

Keep in mind that this was not yet tested as we lack actual HW,
but the OML logic should be the same.

Change-Id: Ie3f1a3c3d7d72a49401d66625516f92cc7384949
metro4 at

#20788 (Mar 6, 2026, 1:20:11 PM)

Fix lint errors: test for membership should be `not in`

src/osmocom/tlv.py:477:16: E713 [*] Test for membership should be `not in`
    |
475 |         key-value pair, where the key is the snake-reformatted type name of 'self'"""
476 |         expected_key_name = camel_to_snake(type(self).__name__)
477 |         if not expected_key_name in decoded:
    |                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ E713
478 |             raise ValueError("Dict %s doesn't contain expected key %s" % (decoded, expected_key_name))
479 |         self.from_val_dict(decoded[expected_key_name])
    |
    = help: Convert to `not in`

Change-Id: I2ca3135f1ce38dcc06dc95c38f4b6258a60121cd
Oliver Smith at

#20787 (Mar 6, 2026, 1:20:05 PM)

Fix lint errors: test for membership should be `not in`

src/osmocom/tlv.py:477:16: E713 [*] Test for membership should be `not in`
    |
475 |         key-value pair, where the key is the snake-reformatted type name of 'self'"""
476 |         expected_key_name = camel_to_snake(type(self).__name__)
477 |         if not expected_key_name in decoded:
    |                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ E713
478 |             raise ValueError("Dict %s doesn't contain expected key %s" % (decoded, expected_key_name))
479 |         self.from_val_dict(decoded[expected_key_name])
    |
    = help: Convert to `not in`

Change-Id: I2ca3135f1ce38dcc06dc95c38f4b6258a60121cd
Oliver Smith at

#20786 (Mar 6, 2026, 1:19:22 PM)

Fix lint errors: avoid equality comparisons to `False`

src/osmocom/utils.py:150:8: E712 Avoid equality comparisons to `False`; use `if not signed:` for false checks
    |
148 |     """
149 |
150 |     if signed == False and number < 0:
    |        ^^^^^^^^^^^^^^^ E712
151 |         raise ValueError("expecting a positive number")
    |
    = help: Replace with `not signed`

Change-Id: I2ebb33c498b4a7e6229980462aa51b579fa4f782
Oliver Smith at

#20785 (Mar 6, 2026, 1:19:20 PM)

Fix lint errors: avoid equality comparisons to `False`

src/osmocom/utils.py:150:8: E712 Avoid equality comparisons to `False`; use `if not signed:` for false checks
    |
148 |     """
149 |
150 |     if signed == False and number < 0:
    |        ^^^^^^^^^^^^^^^ E712
151 |         raise ValueError("expecting a positive number")
    |
    = help: Replace with `not signed`

Change-Id: I2ebb33c498b4a7e6229980462aa51b579fa4f782
Oliver Smith at

#20784 (Mar 6, 2026, 9:20:00 AM)

debian/changelog: bump to 1.14.0

Fix that debian/changelog is still on 1.12.0 on current master while the
latest stable version is on 1.13.x. This is confusing, and it also
results in unexpected behavior on debian 13: After enabling the Osmocom
nightly repository and asking apt to install osmo-sgsn or osmo-gtphub,
it will pick the 1.13.x versions from the debian repository instead of
the versions from the Osmocom nightly repository.

Related: OS#6968
Change-Id: Id8763bf96141fcb38f550c7885a1c9fd02cec198
Oliver Smith at

#20783 (Mar 6, 2026, 9:19:55 AM)

debian/changelog: bump to 1.14.0

Fix that debian/changelog is still on 1.12.0 on current master while the
latest stable version is on 1.13.x. This is confusing, and it also
results in unexpected behavior on debian 13: After enabling the Osmocom
nightly repository and asking apt to install osmo-sgsn or osmo-gtphub,
it will pick the 1.13.x versions from the debian repository instead of
the versions from the Osmocom nightly repository.

Related: OS#6968
Change-Id: Id8763bf96141fcb38f550c7885a1c9fd02cec198
Oliver Smith at

#20782 (Mar 5, 2026, 1:36:59 PM)

nokia_site: Add new BTS types to the list

This commit adds Flexi EDGE, Flexi Multiradio and Flexi Multiradio 10
BTS types to the supported device list.

Keep in mind that this was not yet tested as we lack actual HW,
but the OML logic should be the same.

Change-Id: Ia0dbbf148394d8205dc9219b41cfba3cf62bdeaa
metro4 at

#20781 (Mar 5, 2026, 1:36:57 PM)

nokia_site: Add new BTS types to the list

This commit adds Flexi EDGE, Flexi Multiradio and Flexi Multiradio 10
BTS types to the supported device list.

Keep in mind that this was not yet tested as we lack actual HW,
but the OML logic should be the same.

Change-Id: Ia0dbbf148394d8205dc9219b41cfba3cf62bdeaa
metro4 at

#20780 (Mar 3, 2026, 4:55:37 PM)

Bump version: 1.13.0.1-6d38 → 1.13.1

Change-Id: Ic648f4165427d04b25855d7c42d3b44ba155e1ad
Pau Espin Pedrol at

#20779 (Mar 3, 2026, 4:55:33 PM)

Bump version: 1.13.0.1-6d38 → 1.13.1

Change-Id: Ic648f4165427d04b25855d7c42d3b44ba155e1ad
Pau Espin Pedrol at

#20778 (Mar 3, 2026, 4:55:33 PM)

Bump version: 1.13.0.1-6d38 → 1.13.1

Change-Id: Ic648f4165427d04b25855d7c42d3b44ba155e1ad
Pau Espin Pedrol at

#20777 (Mar 3, 2026, 4:32:44 PM)

nokia_site: Change the LAPD N200 counter for RSL

This commit raises the LAPD RSL N200 (retransmission) counter for
Nokia RSL links. The reason is that the readiness of the TRX is not
signalled (OML) nor can be queried from the BTS in any way, and on
larger macro setups the TRX reset takes ~15 seconds, thus the RSL
bootstrap times out before the TRX becomes ready.

This issue presents itself with UltraSite types, does not affect
InSite or MetroSite (the later two are "integrated TRX" units).

Runtime tested with InSite and UltraSite (multi-TRX).

Change-Id: I2386eea4f225fadbd282de52a43dddb6d284f4f9
metro4 at

#20776 (Mar 3, 2026, 4:32:42 PM)

nokia_site: Change the LAPD N200 counter for RSL

This commit raises the LAPD RSL N200 (retransmission) counter for
Nokia RSL links. The reason is that the readiness of the TRX is not
signalled (OML) nor can be queried from the BTS in any way, and on
larger macro setups the TRX reset takes ~15 seconds, thus the RSL
bootstrap times out before the TRX becomes ready.

This issue presents itself with UltraSite types, does not affect
InSite or MetroSite (the later two are "integrated TRX" units).

Runtime tested with InSite and UltraSite (multi-TRX).

Change-Id: I2386eea4f225fadbd282de52a43dddb6d284f4f9
metro4 at

#20775 (Mar 3, 2026, 4:29:27 PM)

Drop libusb dependency

We aren't using libusb anywhere directly, so drop checks for it, plus
incorrect USB_INCLUDES which was empty.

Change-Id: I600db0bfe6f746024a329f2972879563d2a013b0
Pau Espin Pedrol at

#20774 (Mar 3, 2026, 4:29:27 PM)

Drop libusb dependency

We aren't using libusb anywhere directly, so drop checks for it, plus
incorrect USB_INCLUDES which was empty.

Change-Id: I600db0bfe6f746024a329f2972879563d2a013b0
Pau Espin Pedrol at

#20773 (Mar 3, 2026, 3:34:19 PM)

ipc: Makefile.am: Pick already compiled UHDDevice.o object

Take the chance to reorder LDADD, since it expects dependencies to be in
inversed-tree order.

Change-Id: I344309cb7264caf1622b70e87bb44ad3f32edb88
Pau Espin Pedrol at

#20772 (Mar 3, 2026, 3:34:17 PM)

ipc: Makefile.am: Pick already compiled UHDDevice.o object

Take the chance to reorder LDADD, since it expects dependencies to be in
inversed-tree order.

Change-Id: I344309cb7264caf1622b70e87bb44ad3f32edb88
Pau Espin Pedrol at

#20771 (Mar 3, 2026, 3:26:52 PM)

ipc: Makefile.am: Pick already compiled UHDDevice.o object

Take the chance to reorder LDADD, since it expects dependencies to be in
inversed-tree order.

Change-Id: I344309cb7264caf1622b70e87bb44ad3f32edb88
Pau Espin Pedrol at

#20770 (Mar 3, 2026, 3:26:52 PM)

ipc: Makefile.am: Pick already compiled UHDDevice.o object

Take the chance to reorder LDADD, since it expects dependencies to be in
inversed-tree order.

Change-Id: I344309cb7264caf1622b70e87bb44ad3f32edb88
Pau Espin Pedrol at

#20769 (Mar 3, 2026, 2:38:27 PM)

ipc: Makefile.am: Pick already compiled UHDDevice.o object

Take the chance to reorder LDADD, since it expects dependencies to be in
inversed-tree order.

Change-Id: I344309cb7264caf1622b70e87bb44ad3f32edb88
Pau Espin Pedrol at

#20768 (Mar 3, 2026, 2:38:27 PM)

Depend on libosmogsm explicitly

Transceiver52M/device/common/bandmanager.h uses gsm_freq102arfcn() from
libosmogsm, so we should include libosmogsm.

Change-Id: I379b7e285ea9c124709de32d6e8a44b819f62111
Pau Espin Pedrol at

#20767 (Mar 3, 2026, 2:38:22 PM)

configure.ac: Avoid building shared libraries by default

Those libraries are internal to osmo-trx and won't be installed,
so there's no use in building them.

Change-Id: I93c8ace45008b6ab8fba070c174bcec11e3b106e
Pau Espin Pedrol at

#20766 (Mar 3, 2026, 2:38:22 PM)

ipc: Makefile.am: Pick already compiled UHDDevice.o object

Take the chance to reorder LDADD, since it expects dependencies to be in
inversed-tree order.

Change-Id: I344309cb7264caf1622b70e87bb44ad3f32edb88
Pau Espin Pedrol at

#20765 (Mar 3, 2026, 2:38:22 PM)

Depend on libosmogsm explicitly

Transceiver52M/device/common/bandmanager.h uses gsm_freq102arfcn() from
libosmogsm, so we should include libosmogsm.

Change-Id: I379b7e285ea9c124709de32d6e8a44b819f62111
Pau Espin Pedrol at

#20764 (Mar 3, 2026, 2:38:22 PM)

configure.ac: Avoid building shared libraries by default

Those libraries are internal to osmo-trx and won't be installed,
so there's no use in building them.

Change-Id: I93c8ace45008b6ab8fba070c174bcec11e3b106e
Pau Espin Pedrol at

#20763 (Mar 3, 2026, 1:47:16 PM)

configure.ac: Update deprecated AC_PROG_LIBTOOL to LT_INIT

As mentioned in
https://www.gnu.org/software/libtool/manual/html_node/LT_005fINIT.html.

Change-Id: I3b811b11ee4bbd5856329a5bdbcb5a8d2776495a
Pau Espin Pedrol at

#20762 (Mar 3, 2026, 1:47:12 PM)

Depend on libosmogsm explicitly

Transceiver52M/device/common/bandmanager.h uses gsm_freq102arfcn() from
libosmogsm, so we should include libosmogsm.

Change-Id: I379b7e285ea9c124709de32d6e8a44b819f62111
Pau Espin Pedrol at

#20761 (Mar 3, 2026, 1:47:12 PM)

configure.ac: Avoid building shared libraries by default

Those libraries are internal to osmo-trx and won't be installed,
so there's no use in building them.

Change-Id: I93c8ace45008b6ab8fba070c174bcec11e3b106e
Pau Espin Pedrol at

#20760 (Mar 3, 2026, 1:47:11 PM)

configure.ac: Update deprecated AC_PROG_LIBTOOL to LT_INIT

As mentioned in
https://www.gnu.org/software/libtool/manual/html_node/LT_005fINIT.html.

Change-Id: I3b811b11ee4bbd5856329a5bdbcb5a8d2776495a
Pau Espin Pedrol at

#20759 (Mar 3, 2026, 1:47:11 PM)

configure.ac: Avoid building shared libraries by default

Those libraries are internal to osmo-trx and won't be installed,
so there's no use in building them.

Change-Id: I93c8ace45008b6ab8fba070c174bcec11e3b106e
Pau Espin Pedrol at

#20758 (Mar 3, 2026, 1:47:10 PM)

Depend on libosmogsm explicitly

Transceiver52M/device/common/bandmanager.h uses gsm_freq102arfcn() from
libosmogsm, so we should include libosmogsm.

Change-Id: I379b7e285ea9c124709de32d6e8a44b819f62111
Pau Espin Pedrol at

#20757 (Mar 2, 2026, 11:37:27 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
- Keep original modulateBurstLaurent() as fallback
- 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

#20756 (Mar 2, 2026, 11:37:23 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
- Keep original modulateBurstLaurent() as fallback
- 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

#20755 (Mar 2, 2026, 11:23:12 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
- Keep original modulateBurstLaurent() as fallback
- 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

#20754 (Mar 2, 2026, 11:23:12 PM)

build: install common/GSM/transceiver libraries for emscripten and add pkg-config files

Expose previously internal libs (libcommon, libGSM, libtransceiver_common)
when building with emscripten, install headers and generate .pc files.
Keep them noinst for native builds.

Change-Id: I2495c5b5c79f2fe74bef83902058e1d2207c1f3c
dtv.comp at

#20753 (Mar 2, 2026, 11:23:09 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
- Keep original modulateBurstLaurent() as fallback
- 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

#20752 (Mar 2, 2026, 11:23:09 PM)

build: install common/GSM/transceiver libraries for emscripten and add pkg-config files

Expose previously internal libs (libcommon, libGSM, libtransceiver_common)
when building with emscripten, install headers and generate .pc files.
Keep them noinst for native builds.

Change-Id: I2495c5b5c79f2fe74bef83902058e1d2207c1f3c
dtv.comp at

#20751 (Mar 2, 2026, 8:03:42 PM)

nokia_site: Change the LAPD N200 counter for RSL

This commit raises the LAPD RSL N200 (retransmission) counter for
Nokia RSL links. The reason is that the readiness of the TRX is not
signalled (OML) nor can be queried from the BTS in any way, and on
larger macro setups the TRX reset takes ~15 seconds, thus the RSL
bootstrap times out before the TRX becomes ready.

This issues presents itself with UltraSite types, does not affect
InSite or MetroSite (the later two are "integrated TRX" units).

Runtime tested with InSite and UltraSite (multi-TRX).

Change-Id: I2386eea4f225fadbd282de52a43dddb6d284f4f9
metro4 at

#20750 (Mar 2, 2026, 8:03:41 PM)

nokia_site: Change the LAPD N200 counter for RSL

This commit raises the LAPD RSL N200 (retransmission) counter for
Nokia RSL links. The reason is that the readiness of the TRX is not
signalled (OML) nor can be queried from the BTS in any way, and on
larger macro setups the TRX reset takes ~15 seconds, thus the RSL
bootstrap times out before the TRX becomes ready.

This issues presents itself with UltraSite types, does not affect
InSite or MetroSite (the later two are "integrated TRX" units).

Runtime tested with InSite and UltraSite (multi-TRX).

Change-Id: I2386eea4f225fadbd282de52a43dddb6d284f4f9
metro4 at

#20749 (Mar 2, 2026, 7:19:20 PM)

nokia_site: Add new BTS types to the list

This commit adds Flexi EDGE, Flexi Multiradio and Flexi Multiradio 10
BTS types to the supported device list.

Keep in mind that this was not yet tested as we lack actual HW,
but the OML logic should be the same.

Change-Id: Ia0dbbf148394d8205dc9219b41cfba3cf62bdeaa
metro4 at

#20748 (Mar 2, 2026, 7:19:18 PM)

nokia_site: Add new BTS types to the list

This commit adds Flexi EDGE, Flexi Multiradio and Flexi Multiradio 10
BTS types to the supported device list.

Keep in mind that this was not yet tested as we lack actual HW,
but the OML logic should be the same.

Change-Id: Ia0dbbf148394d8205dc9219b41cfba3cf62bdeaa
metro4 at

#20747 (Mar 2, 2026, 3:14:51 PM)

Use new libosmo-asn1-tcap API osmo_asn1_tcap_TCMessage_decode()

This allows passing a talloc context used to allocate memory when
decoding the message.

Related: SYS#5423
Related: OS#6965
Change-Id: Iebeb2808c54c5b82026a1b31d985aa73f602b42a
Pau Espin Pedrol at

#20746 (Mar 2, 2026, 3:14:49 PM)

Use new libosmo-asn1-tcap API osmo_asn1_tcap_TCMessage_decode()

This allows passing a talloc context used to allocate memory when
decoding the message.

Related: SYS#5423
Related: OS#6965
Change-Id: Iebeb2808c54c5b82026a1b31d985aa73f602b42a
Pau Espin Pedrol at

#20745 (Mar 2, 2026, 2:44:06 PM)

build: install common/GSM/transceiver libraries for emscripten and add pkg-config files

Expose previously internal libs (libcommon, libGSM, libtransceiver_common)
when building with emscripten, install headers and generate .pc files.
Keep them noinst for native builds.

Change-Id: I2495c5b5c79f2fe74bef83902058e1d2207c1f3c
dtv.comp at

#20744 (Mar 2, 2026, 2:44:04 PM)

build: install common/GSM/transceiver libraries for emscripten and add pkg-config files

Expose previously internal libs (libcommon, libGSM, libtransceiver_common)
when building with emscripten, install headers and generate .pc files.
Keep them noinst for native builds.

Change-Id: I2495c5b5c79f2fe74bef83902058e1d2207c1f3c
dtv.comp at

#20743 (Mar 2, 2026, 2:35:50 PM)

feat(usdr): add USDR backend support (osmo-trx-usdr)

- Implement USDRDevice backend for Transceiver52M
- Add --with-usdr configure option and build integration
- Add systemd service unit (osmo-trx-usdr.service)
- Add Debian packaging files for osmo-trx-usdr
- Provide example configuration file
- Extend manuals and device documentation with USDR backend section

Change-Id: I5d1d25921514954c4929ae6e7352168b3ceb05df
dtv.comp at

#20742 (Mar 2, 2026, 2:35:50 PM)

feat(usdr): add USDR backend support (osmo-trx-usdr)

- Implement USDRDevice backend for Transceiver52M
- Add --with-usdr configure option and build integration
- Add systemd service unit (osmo-trx-usdr.service)
- Add Debian packaging files for osmo-trx-usdr
- Provide example configuration file
- Extend manuals and device documentation with USDR backend section

Change-Id: I5d1d25921514954c4929ae6e7352168b3ceb05df
dtv.comp at

#20741 (Mar 2, 2026, 1:10:24 PM)

debian/*.install: make paths consistent

Some of the paths start with a leading slash and some don't. Both
variants work, but this is confusing. Let's go without the leading
slash, because the paths are releative (in this case to debian/tmp where
"make install" puts the files during debian packaging).

Related: https://gerrit.osmocom.org/c/osmo-trx/+/42198/comment/ae98245f_98e51337/
Related: https://www.debian.org/doc/manuals/maint-guide/dother.en.html#install
Related: https://manpages.debian.org/testing/debhelper/dh_install.1.en.html#debian/
Change-Id: I4b9de40e1fc6d3935ae8ff82804d94cb863663e9
Oliver Smith at

#20740 (Mar 2, 2026, 1:10:22 PM)

debian/*.install: make paths consistent

Some of the paths start with a leading slash and some don't. Both
variants work, but this is confusing. Let's go without the leading
slash, because the paths are releative (in this case to debian/tmp where
"make install" puts the files during debian packaging).

Related: https://gerrit.osmocom.org/c/osmo-trx/+/42198/comment/ae98245f_98e51337/
Related: https://www.debian.org/doc/manuals/maint-guide/dother.en.html#install
Related: https://manpages.debian.org/testing/debhelper/dh_install.1.en.html#debian/
Change-Id: I4b9de40e1fc6d3935ae8ff82804d94cb863663e9
Oliver Smith at

#20739 (Mar 2, 2026, 12:01:19 PM)

feat(usdr): add USDR backend support (osmo-trx-usdr)

- Implement USDRDevice backend for Transceiver52M
- Add --with-usdr configure option and build integration
- Add systemd service unit (osmo-trx-usdr.service)
- Add Debian packaging files for osmo-trx-usdr
- Provide example configuration file
- Extend manuals and device documentation with USDR backend section

Change-Id: I5d1d25921514954c4929ae6e7352168b3ceb05df
dtv.comp at

#20738 (Mar 2, 2026, 12:01:19 PM)

feat(usdr): add USDR backend support (osmo-trx-usdr)

- Implement USDRDevice backend for Transceiver52M
- Add --with-usdr configure option and build integration
- Add systemd service unit (osmo-trx-usdr.service)
- Add Debian packaging files for osmo-trx-usdr
- Provide example configuration file
- Extend manuals and device documentation with USDR backend section

Change-Id: I5d1d25921514954c4929ae6e7352168b3ceb05df
dtv.comp at

#20737 (Mar 1, 2026, 9:18:51 PM)

tch: fix RTP clock not ticking for unhandled payload types

When the payload type from the DSP is not handled by the switch
in l1if_tch_rx(), rmsg stays NULL and we return 0 without calling
add_l1sap_header(), silently dropping a 20ms RTP tick.

Always allocate an empty RTP frame when rmsg is NULL so the RTP
clock keeps ticking.

Related: OS#5974

Change-Id: I202522ea6f83d77872a2f84d9a2622b87e829a0c
Signed-off-by: Thorkell Thorkelsson <thorkellmanithorkelsson@gmail.com>
thorkellmanithorkelsson at

#20736 (Mar 1, 2026, 9:18:50 PM)

tch: fix RTP clock not ticking for unhandled payload types

When the payload type from the DSP is not handled by the switch
in l1if_tch_rx(), rmsg stays NULL and we return 0 without calling
add_l1sap_header(), silently dropping a 20ms RTP tick.

Always allocate an empty RTP frame when rmsg is NULL so the RTP
clock keeps ticking.

Related: OS#5974

Change-Id: I202522ea6f83d77872a2f84d9a2622b87e829a0c
Signed-off-by: Thorkell Thorkelsson <thorkellmanithorkelsson@gmail.com>
thorkellmanithorkelsson at

#20735 (Mar 1, 2026, 9:16:12 PM)

tch: fix RTP clock not ticking for unhandled payload types

When the payload type from the DSP is not handled by the switch
in l1if_tch_rx(), rmsg stays NULL and we return 0 without calling
add_l1sap_header(), silently dropping a 20ms RTP tick.

Always allocate an empty RTP frame when rmsg is NULL so the RTP
clock keeps ticking.

Related: OS#5974

Change-Id: I202522ea6f83d77872a2f84d9a2622b87e829a0c
Signed-off-by: Thorkell Thorkelsson <thorkellmanithorkelsson@gmail.com>
thorkellmanithorkelsson at

#20734 (Mar 1, 2026, 9:16:10 PM)

tch: fix RTP clock not ticking for unhandled payload types

When the payload type from the DSP is not handled by the switch
in l1if_tch_rx(), rmsg stays NULL and we return 0 without calling
add_l1sap_header(), silently dropping a 20ms RTP tick.

Always allocate an empty RTP frame when rmsg is NULL so the RTP
clock keeps ticking.

Related: OS#5974

Change-Id: I202522ea6f83d77872a2f84d9a2622b87e829a0c
Signed-off-by: Thorkell Thorkelsson <thorkellmanithorkelsson@gmail.com>
thorkellmanithorkelsson at

#20733 (Mar 1, 2026, 2:29:59 AM)

tch: fix RTP clock not ticking for unhandled payload types

When the payload type from the DSP is not handled by the switch
in l1if_tch_rx(), rmsg stays NULL and we return 0 without calling
add_l1sap_header(), silently dropping a 20ms RTP tick.

Always allocate an empty RTP frame when rmsg is NULL so the RTP
clock keeps ticking.

Related: OS#5974

Change-Id: I202522ea6f83d77872a2f84d9a2622b87e829a0c
Signed-off-by: Thorkell Thorkelsson <thorkellmanithorkelsson@gmail.com>
thorkellmanithorkelsson at

#20732 (Mar 1, 2026, 2:29:57 AM)

tch: fix RTP clock not ticking for unhandled payload types

When the payload type from the DSP is not handled by the switch
in l1if_tch_rx(), rmsg stays NULL and we return 0 without calling
add_l1sap_header(), silently dropping a 20ms RTP tick.

Always allocate an empty RTP frame when rmsg is NULL so the RTP
clock keeps ticking.

Related: OS#5974

Change-Id: I202522ea6f83d77872a2f84d9a2622b87e829a0c
Signed-off-by: Thorkell Thorkelsson <thorkellmanithorkelsson@gmail.com>
thorkellmanithorkelsson at

#20731 (Feb 28, 2026, 9:57:18 PM)

build: install common/GSM/transceiver libraries for emscripten and add pkg-config files

Expose previously internal libs (libcommon, libGSM, libtransceiver_common)
when building with emscripten, install headers and generate .pc files.
Keep them noinst for native builds.

Change-Id: I2495c5b5c79f2fe74bef83902058e1d2207c1f3c
dtv.comp at

#20730 (Feb 28, 2026, 9:57:16 PM)

build: install common/GSM/transceiver libraries for emscripten and add pkg-config files

Expose previously internal libs (libcommon, libGSM, libtransceiver_common)
when building with emscripten, install headers and generate .pc files.
Keep them noinst for native builds.

Change-Id: I2495c5b5c79f2fe74bef83902058e1d2207c1f3c
dtv.comp at

#20729 (Feb 28, 2026, 9:11:23 PM)

radio: improve API documentation in RadioDevice

Change-Id: I7b41c549d743ad180a1ddcd8c0313e1003860070
dtv.comp at

#20728 (Feb 28, 2026, 9:11:23 PM)

radio: improve API documentation in RadioDevice

Change-Id: I7b41c549d743ad180a1ddcd8c0313e1003860070
dtv.comp at

#20727 (Feb 28, 2026, 9:11:20 PM)

feat(usdr): add USDR backend support (osmo-trx-usdr)

- Implement USDRDevice backend for Transceiver52M
- Add --with-usdr configure option and build integration
- Add systemd service unit (osmo-trx-usdr.service)
- Add Debian packaging files for osmo-trx-usdr
- Provide example configuration file
- Extend manuals and device documentation with USDR backend section

Change-Id: I5d1d25921514954c4929ae6e7352168b3ceb05df
dtv.comp at

#20726 (Feb 28, 2026, 9:11:20 PM)

feat(usdr): add USDR backend support (osmo-trx-usdr)

- Implement USDRDevice backend for Transceiver52M
- Add --with-usdr configure option and build integration
- Add systemd service unit (osmo-trx-usdr.service)
- Add Debian packaging files for osmo-trx-usdr
- Provide example configuration file
- Extend manuals and device documentation with USDR backend section

Change-Id: I5d1d25921514954c4929ae6e7352168b3ceb05df
dtv.comp at

#20725 (Feb 27, 2026, 8:44:07 PM)

tests: Use mem alloc macro instead of direct calloc() call

This way we make sure the proper function to alloc is called.

Change-Id: Ia9c7cf1f958f273dd7a5e23cf7633e45fa9d577f
Pau Espin Pedrol at

#20724 (Feb 27, 2026, 8:44:06 PM)

Add README.md

Change-Id: Ie3fa506cb9b40992cebe6942ea833a2e49ba2680
Pau Espin Pedrol at

#20723 (Feb 27, 2026, 8:44:05 PM)

Introduce API osmo_asn1_tcap_TCMessage_decode()

This new API allows passing a talloc context where all memory is
allocated by asn1c code is allocated.

Related: SYS#5423
Related: OS#6965
Change-Id: I02923afb3936a1acf6643def27528e35e4b03e86
Pau Espin Pedrol at

#20722 (Feb 27, 2026, 8:44:02 PM)

Use talloc to allocate asn1c decoded structs

This commit adds talloc support but will still use talloc NULL context
everywhere when allocating memory.
This is already useful since it allows programs enabling null context
tracking to get a report of memory usage.

Related: SYS#5423
Related: OS#6965
Change-Id: I6d885527caa5b60011b4fac341b93026ab1833d9
Pau Espin Pedrol at

#20721 (Feb 27, 2026, 8:44:02 PM)

Makefile.am: Avoid removing tcap.h during make -C src/ regen

That header is ours and is the public entry towards the library.

Change-Id: I89a34ef61e6f74ba7482a5abcf55404c157a14fb
Pau Espin Pedrol at

#20720 (Feb 27, 2026, 8:43:58 PM)

tests: Use mem alloc macro instead of direct calloc() call

This way we make sure the proper function to alloc is called.

Change-Id: Ia9c7cf1f958f273dd7a5e23cf7633e45fa9d577f
Pau Espin Pedrol at

#20719 (Feb 27, 2026, 8:43:57 PM)

Introduce API osmo_asn1_tcap_TCMessage_decode()

This new API allows passing a talloc context where all memory is
allocated by asn1c code is allocated.

Related: SYS#5423
Related: OS#6965
Change-Id: I02923afb3936a1acf6643def27528e35e4b03e86
Pau Espin Pedrol at

#20718 (Feb 27, 2026, 8:43:57 PM)

Use talloc to allocate asn1c decoded structs

This commit adds talloc support but will still use talloc NULL context
everywhere when allocating memory.
This is already useful since it allows programs enabling null context
tracking to get a report of memory usage.

Related: SYS#5423
Related: OS#6965
Change-Id: I6d885527caa5b60011b4fac341b93026ab1833d9
Pau Espin Pedrol at

#20717 (Feb 27, 2026, 8:43:57 PM)

Add README.md

Change-Id: Ie3fa506cb9b40992cebe6942ea833a2e49ba2680
Pau Espin Pedrol at

#20716 (Feb 27, 2026, 8:43:56 PM)

Makefile.am: Avoid removing tcap.h during make -C src/ regen

That header is ours and is the public entry towards the library.

Change-Id: I89a34ef61e6f74ba7482a5abcf55404c157a14fb
Pau Espin Pedrol at

#20715 (Feb 27, 2026, 2:55:07 PM)

Use new libosmo-asn1-tcap API osmo_asn1_tcap_TCMessage_decode()

This allows passing a talloc context used to allocate memory when
decoding the message.

Related: SYS#5423
Related: OS#6965
Change-Id: Iebeb2808c54c5b82026a1b31d985aa73f602b42a
Pau Espin Pedrol at

#20714 (Feb 27, 2026, 2:55:07 PM)

Use new libosmo-asn1-tcap API osmo_asn1_tcap_TCMessage_decode()

This allows passing a talloc context used to allocate memory when
decoding the message.

Related: SYS#5423
Related: OS#6965
Change-Id: Iebeb2808c54c5b82026a1b31d985aa73f602b42a
Pau Espin Pedrol at

#20713 (Feb 27, 2026, 2:53:23 PM)

Introduce API osmo_asn1_tcap_TCMessage_decode()

This new API allows passing a talloc context where all memory is
allocated by asn1c code is allocated.

Related: SYS#5423
Related: OS#6965
Change-Id: I02923afb3936a1acf6643def27528e35e4b03e86
Pau Espin Pedrol at

#20712 (Feb 27, 2026, 2:53:22 PM)

Introduce API osmo_asn1_tcap_TCMessage_decode()

This new API allows passing a talloc context where all memory is
allocated by asn1c code is allocated.

Related: SYS#5423
Related: OS#6965
Change-Id: I02923afb3936a1acf6643def27528e35e4b03e86
Pau Espin Pedrol at

#20711 (Feb 27, 2026, 10:47:40 AM)

remsim-client: Don't attempt to pass on illegal TPDU length

TPDUs with length < 5 or > 260 bytes are illegal in T=0.  It doesn't
make sense to send them to bankd, triggering bugs in either bankd,
pcsc-lite or the CCID firmware down the road.  Let's filter them right
where they might originate.

Change-Id: I175eb4622d0e69dbc6aca2cddfe091a78f225da5
laforge at

#20710 (Feb 27, 2026, 10:47:40 AM)

remsim-bankd: Don't pass on illegal TPDUs of illegal length

TPDUs with length < 5 bytes or > 260 bytes are illegal in T=0.  It
doesn't make sense to send them to pcsc-lite, triggering bugs in either
pcsc-lite or the CCID firmware down the road.  Let's filter them.

Change-Id: I5c9f1143b85470234acd2e2ffe3e0cf72bd2ae43
laforge at

#20709 (Feb 27, 2026, 10:47:35 AM)

remsim-client: Don't attempt to pass on illegal TPDU length

TPDUs with length < 5 or > 260 bytes are illegal in T=0.  It doesn't
make sense to send them to bankd, triggering bugs in either bankd,
pcsc-lite or the CCID firmware down the road.  Let's filter them right
where they might originate.

Change-Id: I175eb4622d0e69dbc6aca2cddfe091a78f225da5
laforge at

#20708 (Feb 27, 2026, 10:47:33 AM)

remsim-bankd: Don't pass on illegal TPDUs of illegal length

TPDUs with length < 5 bytes or > 260 bytes are illegal in T=0.  It
doesn't make sense to send them to pcsc-lite, triggering bugs in either
pcsc-lite or the CCID firmware down the road.  Let's filter them.

Change-Id: I5c9f1143b85470234acd2e2ffe3e0cf72bd2ae43
laforge at

#20707 (Feb 27, 2026, 10:34:25 AM)

remsim-bankd: Don't pass on illegal TPDUs of illegal length

TPDUs with length < 5 bytes or > 260 bytes are illegal in T=0.  It
doesn't make sense to send them to pcsc-lite, triggering bugs in either
pcsc-lite or the CCID firmware down the road.  Let's filter them.

Change-Id: I5c9f1143b85470234acd2e2ffe3e0cf72bd2ae43
laforge at

#20706 (Feb 27, 2026, 10:34:25 AM)

remsim-client: Don't attempt to pass on illegal TPDU length

TPDUs with length < 5 or > 260 bytes are illegal in T=0.  It doesn't
make sense to send them to bankd, triggering bugs in either bankd,
pcsc-lite or the CCID firmware down the road.  Let's filter them right
where they might originate.

Change-Id: I175eb4622d0e69dbc6aca2cddfe091a78f225da5
laforge at

#20705 (Feb 27, 2026, 10:34:20 AM)

remsim-bankd: Don't pass on illegal TPDUs of illegal length

TPDUs with length < 5 bytes or > 260 bytes are illegal in T=0.  It
doesn't make sense to send them to pcsc-lite, triggering bugs in either
pcsc-lite or the CCID firmware down the road.  Let's filter them.

Change-Id: I5c9f1143b85470234acd2e2ffe3e0cf72bd2ae43
laforge at

#20704 (Feb 27, 2026, 10:34:20 AM)

remsim-client: Don't attempt to pass on illegal TPDU length

TPDUs with length < 5 or > 260 bytes are illegal in T=0.  It doesn't
make sense to send them to bankd, triggering bugs in either bankd,
pcsc-lite or the CCID firmware down the road.  Let's filter them right
where they might originate.

Change-Id: I175eb4622d0e69dbc6aca2cddfe091a78f225da5
laforge at

#20703 (Feb 27, 2026, 10:32:15 AM)

remsim-client: Don't attempt to pass on illegal TPDU length

TPDUs with length < 5 or > 260 bytes are illegal in T=0.  It doesn't
make sense to send them to bankd, triggering bugs in either bankd,
pcsc-lite or the CCID firmware down the road.  Let's filter them right
where they might originate.

Change-Id: I175eb4622d0e69dbc6aca2cddfe091a78f225da5
laforge at

#20702 (Feb 27, 2026, 10:32:15 AM)

remsim-bankd: Don't pass on illegal TPDUs of illegal length

TPDUs with length < 5 bytes or > 260 bytes are illegal in T=0.  It
doesn't make sense to send them to pcsc-lite, triggering bugs in either
pcsc-lite or the CCID firmware down the road.  Let's filter them.

Change-Id: I5c9f1143b85470234acd2e2ffe3e0cf72bd2ae43
laforge at

#20701 (Feb 27, 2026, 10:32:13 AM)

remsim-client: Don't attempt to pass on illegal TPDU length

TPDUs with length < 5 or > 260 bytes are illegal in T=0.  It doesn't
make sense to send them to bankd, triggering bugs in either bankd,
pcsc-lite or the CCID firmware down the road.  Let's filter them right
where they might originate.

Change-Id: I175eb4622d0e69dbc6aca2cddfe091a78f225da5
laforge at

#20700 (Feb 27, 2026, 10:32:13 AM)

remsim-bankd: Don't pass on illegal TPDUs of illegal length

TPDUs with length < 5 bytes or > 260 bytes are illegal in T=0.  It
doesn't make sense to send them to pcsc-lite, triggering bugs in either
pcsc-lite or the CCID firmware down the road.  Let's filter them.

Change-Id: I5c9f1143b85470234acd2e2ffe3e0cf72bd2ae43
laforge at

#20699 (Feb 27, 2026, 10:24:00 AM)

log at NOTICE level if somebody uses loopback addresses.

It appears a common mistake is to e.g. run remsim-server + remsim-bankd
on one machine and then instruct them to use localhost or other
loopback-routed addresses.  This won't work as that address is then
sent to a [remote] remsim-client that attempts to reach the bankd
at localhost.

Change-Id: I3b4eda10e81a705aef8d647a860890a74cba8f13
laforge at

#20698 (Feb 27, 2026, 10:24:00 AM)

remsim-client: Don't attempt to pass on TPDU length < 5

TPDUs with length < 5 bytes are illegal in T=0.  It doesn't make sense
to send them to bankd, triggering bugs in either bankd, pcsc-lite or the
CCID firmware down the road.  Let's filter them right where they might
originate.

Change-Id: I175eb4622d0e69dbc6aca2cddfe091a78f225da5
laforge at

#20697 (Feb 27, 2026, 10:23:55 AM)

log at NOTICE level if somebody uses loopback addresses.

It appears a common mistake is to e.g. run remsim-server + remsim-bankd
on one machine and then instruct them to use localhost or other
loopback-routed addresses.  This won't work as that address is then
sent to a [remote] remsim-client that attempts to reach the bankd
at localhost.

Change-Id: I3b4eda10e81a705aef8d647a860890a74cba8f13
laforge at

#20696 (Feb 27, 2026, 10:23:55 AM)

remsim-client: Don't attempt to pass on TPDU length < 5

TPDUs with length < 5 bytes are illegal in T=0.  It doesn't make sense
to send them to bankd, triggering bugs in either bankd, pcsc-lite or the
CCID firmware down the road.  Let's filter them right where they might
originate.

Change-Id: I175eb4622d0e69dbc6aca2cddfe091a78f225da5
laforge at

#20695 (Feb 27, 2026, 10:19:38 AM)

Use gsmtap_inst_fd2() to remove compiler warning

gsmtap.c: In function 'osmo_st2_gsmtap_send_apdu':
gsmtap.c:69:9: warning: 'gsmtap_inst_fd' is deprecated: Use gsmtap_inst_fd2() instead [-Wdeprecated-declarations]
   69 |         rc = write(gsmtap_inst_fd(g_gti), buf, gross_len);
      |         ^~

Change-Id: I62de38175e63cb563635a01b025b805981e4b7a9
laforge at

#20694 (Feb 27, 2026, 10:19:38 AM)

WIP: make 6Cxx status codes in case 2/4 ambiguous situations work

Change-Id: I968608e73057e9f57d3a89aae485d1a278e503e4
laforge at

#20693 (Feb 27, 2026, 10:19:36 AM)

WIP: make 6Cxx status codes in case 2/4 ambiguous situations work

Change-Id: I968608e73057e9f57d3a89aae485d1a278e503e4
laforge at

#20692 (Feb 27, 2026, 10:19:28 AM)

Use gsmtap_inst_fd2() to remove compiler warning

gsmtap.c: In function 'osmo_st2_gsmtap_send_apdu':
gsmtap.c:69:9: warning: 'gsmtap_inst_fd' is deprecated: Use gsmtap_inst_fd2() instead [-Wdeprecated-declarations]
   69 |         rc = write(gsmtap_inst_fd(g_gti), buf, gross_len);
      |         ^~

Change-Id: I62de38175e63cb563635a01b025b805981e4b7a9
laforge at

#20691 (Feb 26, 2026, 6:38:02 PM)

fix(threads): centralize portable strerror handling

- Move strerror_r portability logic to Utils
- Add strerror_buf() helper
- Simplify thread error logging in Threads.cpp

Change-Id: I642aff8a9f98823e117c4debd19384ddf5975039
dtv.comp at

#20690 (Feb 26, 2026, 6:37:59 PM)

fix(threads): centralize portable strerror handling

- Move strerror_r portability logic to Utils
- Add strerror_buf() helper
- Simplify thread error logging in Threads.cpp

Change-Id: I642aff8a9f98823e117c4debd19384ddf5975039
dtv.comp at

#20689 (Feb 26, 2026, 5:53:31 PM)

feat(usdr): add USDR backend support (osmo-trx-usdr)

- Implement USDRDevice backend for Transceiver52M
- Add --with-usdr configure option and build integration
- Add systemd service unit (osmo-trx-usdr.service)
- Add Debian packaging files for osmo-trx-usdr
- Provide example configuration file
- Extend manuals and device documentation with USDR backend section

Change-Id: I5d1d25921514954c4929ae6e7352168b3ceb05df
dtv.comp at

#20688 (Feb 26, 2026, 5:53:31 PM)

feat(usdr): add USDR backend support (osmo-trx-usdr)

- Implement USDRDevice backend for Transceiver52M
- Add --with-usdr configure option and build integration
- Add systemd service unit (osmo-trx-usdr.service)
- Add Debian packaging files for osmo-trx-usdr
- Provide example configuration file
- Extend manuals and device documentation with USDR backend section

Change-Id: I5d1d25921514954c4929ae6e7352168b3ceb05df
dtv.comp at

#20687 (Feb 26, 2026, 3:44:15 PM)

tcap: Use osmo_asn1_tcap_set_talloc_ctx() to set app talloc ctx

Change-Id: I9c1abc040fdeb58cb97e9b99a2382f336146bc40
Pau Espin Pedrol at

#20686 (Feb 26, 2026, 3:44:14 PM)

tcap: Use osmo_asn1_tcap_set_talloc_ctx() to set app talloc ctx

Change-Id: I9c1abc040fdeb58cb97e9b99a2382f336146bc40
Pau Espin Pedrol at

#20685 (Feb 26, 2026, 3:41:44 PM)

Introduce API osmo_asn1_tcap_set_talloc_ctx()

Related: SYS#5423
Related: OS#6965
Change-Id: I206d401efc7ae7680ac2eff75ee062b9b2676a58
Pau Espin Pedrol at

#20684 (Feb 26, 2026, 3:41:44 PM)

Introduce API osmo_asn1_tcap_set_talloc_ctx()

Related: SYS#5423
Related: OS#6965
Change-Id: I206d401efc7ae7680ac2eff75ee062b9b2676a58
Pau Espin Pedrol at

#20683 (Feb 26, 2026, 3:11:42 PM)

Makefile.am: Avoid removing tcap.h during make -C src/ regen

That header is ours and is the public entry towards the library.

Change-Id: I89a34ef61e6f74ba7482a5abcf55404c157a14fb
Pau Espin Pedrol at

#20682 (Feb 26, 2026, 3:11:42 PM)

Add README.md

Change-Id: Ie3fa506cb9b40992cebe6942ea833a2e49ba2680
Pau Espin Pedrol at

#20681 (Feb 26, 2026, 3:11:39 PM)

tests: Use mem alloc macro instead of direct calloc() call

This way we make sure the proper function to alloc is called.

Change-Id: Ia9c7cf1f958f273dd7a5e23cf7633e45fa9d577f
Pau Espin Pedrol at

#20680 (Feb 26, 2026, 3:11:39 PM)

WIP: talloc

Change-Id: I6d885527caa5b60011b4fac341b93026ab1833d9
Pau Espin Pedrol at

#20679 (Feb 26, 2026, 3:11:38 PM)

Makefile.am: Avoid removing tcap.h during make -C src/ regen

That header is ours and is the public entry towards the library.

Change-Id: I89a34ef61e6f74ba7482a5abcf55404c157a14fb
Pau Espin Pedrol at

#20678 (Feb 26, 2026, 3:11:38 PM)

tests: Use mem alloc macro instead of direct calloc() call

This way we make sure the proper function to alloc is called.

Change-Id: Ia9c7cf1f958f273dd7a5e23cf7633e45fa9d577f
Pau Espin Pedrol at

#20677 (Feb 26, 2026, 3:11:35 PM)

Add README.md

Change-Id: Ie3fa506cb9b40992cebe6942ea833a2e49ba2680
Pau Espin Pedrol at

#20676 (Feb 26, 2026, 3:11:34 PM)

WIP: talloc

Change-Id: I6d885527caa5b60011b4fac341b93026ab1833d9
Pau Espin Pedrol at

#20675 (Feb 26, 2026, 1:09:29 PM)

checkpatch.conf: lint more code

The current linter configuration misses to find lots of formatting
errors as we've seen here:
https://gerrit.osmocom.org/c/osmo-trx/+/42198/comments/f8f1b5a2_3c7e1389

This is caused by the following exclude rules in .checkpatch.conf, which
were added there to avoid that some of the checkpatch rules don't work
correctly with C++ code:

  ---exclude .*h
  ---exclude Transceiver52M/grgsm_vitac/.*
  ---exclude utils/va-test/.*

Fix this by splitting the .checkpatch.conf into two files,
.checkpatch.c.conf and .checkpatch.c++.conf. Let the C version use the
default rules. Let the C++ version ignore the rules that don't work with
C++ code:

* SPACING
  Fails on:
    std::vector<std::string>
  With:
    ERROR:SPACING: spaces required around that '<' (ctx:VxV)
    ERROR:SPACING: spaces required around that '>' (ctx:VxW)

* FUNCTION_ARGUMENTS
  Fails on:
    ScopedLock lock(mLock);
  With:
    WARNING:FUNCTION_ARGUMENTS: function definition argument 'mLock' should also have an identifier name

* INDENTED_LABEL
  Fails on:
    private:
    protected:
  With:
    WARNING:INDENTED_LABEL: labels should not be indented

* NEW_TYPEDEFS
  Fails on:
    typedef std::map<K,D*> Map;
  With:
    WARNING:NEW_TYPEDEFS: do not add new typedefs

With the new config, the linter only complains about the following
things across the existing C++ code, which seem to be legitimate linting
problems (and if not, can be ignored as well):

  BRACES_NOT_NECESSARY, CODE_INDENT, LEADING_SPACE,
  MULTISTATEMENT_MACRO_USE_DO_WHILE, OPEN_BRACE, POINTER_LOCATION,
  PRINTF_I_OSMO, SINGLE_STATEMENT_DO_WHILE_MACRO, SPACE_BEFORE_TAB,
  STATIC_CONST_CHAR_ARRAY, TABSTOP, TRAILING_WHITESPACE

Depends: osmo-ci Ia2e75d9783382cefc3900a4ab51a5a919a2cbbbc
Change-Id: I0df5b6f2f0bf1469a80a1f5859809c30f523f683
Oliver Smith at

#20674 (Feb 26, 2026, 1:09:27 PM)

checkpatch.conf: lint more code

The current linter configuration misses to find lots of formatting
errors as we've seen here:
https://gerrit.osmocom.org/c/osmo-trx/+/42198/comments/f8f1b5a2_3c7e1389

This is caused by the following exclude rules in .checkpatch.conf, which
were added there to avoid that some of the checkpatch rules don't work
correctly with C++ code:

  ---exclude .*h
  ---exclude Transceiver52M/grgsm_vitac/.*
  ---exclude utils/va-test/.*

Fix this by splitting the .checkpatch.conf into two files,
.checkpatch.c.conf and .checkpatch.c++.conf. Let the C version use the
default rules. Let the C++ version ignore the rules that don't work with
C++ code:

* SPACING
  Fails on:
    std::vector<std::string>
  With:
    ERROR:SPACING: spaces required around that '<' (ctx:VxV)
    ERROR:SPACING: spaces required around that '>' (ctx:VxW)

* FUNCTION_ARGUMENTS
  Fails on:
    ScopedLock lock(mLock);
  With:
    WARNING:FUNCTION_ARGUMENTS: function definition argument 'mLock' should also have an identifier name

* INDENTED_LABEL
  Fails on:
    private:
    protected:
  With:
    WARNING:INDENTED_LABEL: labels should not be indented

* NEW_TYPEDEFS
  Fails on:
    typedef std::map<K,D*> Map;
  With:
    WARNING:NEW_TYPEDEFS: do not add new typedefs

With the new config, the linter only complains about the following
things across the existing C++ code, which seem to be legitimate linting
problems (and if not, can be ignored as well):

  BRACES_NOT_NECESSARY, CODE_INDENT, LEADING_SPACE,
  MULTISTATEMENT_MACRO_USE_DO_WHILE, OPEN_BRACE, POINTER_LOCATION,
  PRINTF_I_OSMO, SINGLE_STATEMENT_DO_WHILE_MACRO, SPACE_BEFORE_TAB,
  STATIC_CONST_CHAR_ARRAY, TABSTOP, TRAILING_WHITESPACE

Depends: osmo-ci Ia2e75d9783382cefc3900a4ab51a5a919a2cbbbc
Change-Id: I0df5b6f2f0bf1469a80a1f5859809c30f523f683
Oliver Smith at

#20673 (Feb 26, 2026, 12:06:37 PM)

tcap: Support TID with length 1..4

As described in ITU Q.773 4.2.1.3:
"The length of a Transaction ID is 1 to 4 octets."

asn.1 files also describe TIDs the following way:
OrigTransactionID ::= [APPLICATION 8] IMPLICIT OCTET STRING (SIZE (1..4) )
DestTransactionID ::=[APPLICATION 9] IMPLICIT OCTET STRING (SIZE (1..4) )

Take the chance to avoid asserting based on received external input msg.

Related: SYS#5423
Change-Id: I2748d85624e4be708f7554ee3e60a5bda9162845
Pau Espin Pedrol at

#20672 (Feb 26, 2026, 12:06:37 PM)

tcap: Fix wrong address type printed in log line

Change-Id: I28b0d488159d9fa88e69e8c8b2e53a97b461763a
Pau Espin Pedrol at

#20671 (Feb 26, 2026, 12:06:35 PM)

stp: Enable tracking of NULL memory context

Similar to what's done in most of the OsmoCNI programs.
This allows dumpinng the NULL context using VTY command
'show talloc-context all'.

Change-Id: I4a925967e5bb61c346cf6c4dd2c89b6aaea44b94
Pau Espin Pedrol at

#20670 (Feb 26, 2026, 12:06:35 PM)

tcap: Support TID with length 1..4

As described in ITU Q.773 4.2.1.3:
"The length of a Transaction ID is 1 to 4 octets."

asn.1 files also describe TIDs the following way:
OrigTransactionID ::= [APPLICATION 8] IMPLICIT OCTET STRING (SIZE (1..4) )
DestTransactionID ::=[APPLICATION 9] IMPLICIT OCTET STRING (SIZE (1..4) )

Take the chance to avoid asserting based on received external input msg.

Related: SYS#5423
Change-Id: I2748d85624e4be708f7554ee3e60a5bda9162845
Pau Espin Pedrol at

#20669 (Feb 26, 2026, 12:06:33 PM)

tcap: Fix wrong address type printed in log line

Change-Id: I28b0d488159d9fa88e69e8c8b2e53a97b461763a
Pau Espin Pedrol at

#20668 (Feb 26, 2026, 12:06:33 PM)

stp: Enable tracking of NULL memory context

Similar to what's done in most of the OsmoCNI programs.
This allows dumpinng the NULL context using VTY command
'show talloc-context all'.

Change-Id: I4a925967e5bb61c346cf6c4dd2c89b6aaea44b94
Pau Espin Pedrol at

#20667 (Feb 26, 2026, 11:59:21 AM)

tcap: Support TID with length 1..4

As described in ITU Q.773 4.2.1.3:
"The length of a Transaction ID is 1 to 4 octets."

asn.1 files also describe TIDs the following way:
OrigTransactionID ::= [APPLICATION 8] IMPLICIT OCTET STRING (SIZE (1..4) )
DestTransactionID ::=[APPLICATION 9] IMPLICIT OCTET STRING (SIZE (1..4) )

Take the chance to avoid asserting based on received external input msg.

Related: SYS#5423
Change-Id: I2748d85624e4be708f7554ee3e60a5bda9162845
Pau Espin Pedrol at

#20666 (Feb 26, 2026, 11:59:21 AM)

tcap: Fix wrong address type printed in log line

Change-Id: I28b0d488159d9fa88e69e8c8b2e53a97b461763a
Pau Espin Pedrol at

#20665 (Feb 26, 2026, 11:59:20 AM)

tcap: Lower log level failing to parse msg

invalid rx packets should be logged as NOTICED, not as ERROR.

Change-Id: Idef5736ee2481260f958eece2f5a3bfc009b3d69
Pau Espin Pedrol at

#20664 (Feb 26, 2026, 11:59:09 AM)

tcap: Fix return code in tcap_as_rx_sccp_asp()

That code path is not an error, simply the message is not TCAP.

Take the chance to clarify the behavior of the function.

Change-Id: I54c4a1bbaa8e107cf433cc898658a672c2b53c3c
Pau Espin Pedrol at

#20663 (Feb 26, 2026, 11:58:36 AM)

stp: Enable tracking of NULL memory context

Similar to what's done in most of the OsmoCNI programs.
This allows dumpinng the NULL context using VTY command
'show talloc-context all'.

Change-Id: I4a925967e5bb61c346cf6c4dd2c89b6aaea44b94
Pau Espin Pedrol at

#20662 (Feb 26, 2026, 11:58:24 AM)

tcap: Support TID with length 1..4

As described in ITU Q.773 4.2.1.3:
"The length of a Transaction ID is 1 to 4 octets."

asn.1 files also describe TIDs the following way:
OrigTransactionID ::= [APPLICATION 8] IMPLICIT OCTET STRING (SIZE (1..4) )
DestTransactionID ::=[APPLICATION 9] IMPLICIT OCTET STRING (SIZE (1..4) )

Take the chance to avoid asserting based on received external input msg.

Related: SYS#5423
Change-Id: I2748d85624e4be708f7554ee3e60a5bda9162845
Pau Espin Pedrol at

#20661 (Feb 26, 2026, 11:58:13 AM)

tcap: Fix return code in tcap_as_rx_sccp_asp()

That code path is not an error, simply the message is not TCAP.

Take the chance to clarify the behavior of the function.

Change-Id: I54c4a1bbaa8e107cf433cc898658a672c2b53c3c
Pau Espin Pedrol at

#20660 (Feb 26, 2026, 11:58:05 AM)

stp: Enable tracking of NULL memory context

Similar to what's done in most of the OsmoCNI programs.
This allows dumpinng the NULL context using VTY command
'show talloc-context all'.

Change-Id: I4a925967e5bb61c346cf6c4dd2c89b6aaea44b94
Pau Espin Pedrol at

#20659 (Feb 26, 2026, 11:58:04 AM)

tcap: Fix wrong address type printed in log line

Change-Id: I28b0d488159d9fa88e69e8c8b2e53a97b461763a
Pau Espin Pedrol at

#20658 (Feb 26, 2026, 11:58:03 AM)

tcap: Lower log level failing to parse msg

invalid rx packets should be logged as NOTICED, not as ERROR.

Change-Id: Idef5736ee2481260f958eece2f5a3bfc009b3d69
Pau Espin Pedrol at

#20657 (Feb 26, 2026, 11:15:35 AM)

stp: Enable tracking of NULL memory context

Similar to what's done in most of the OsmoCNI programs.
This allows dumpinng the NULL context using VTY command
'show talloc-context all'.

Change-Id: I4a925967e5bb61c346cf6c4dd2c89b6aaea44b94
Pau Espin Pedrol at

#20656 (Feb 26, 2026, 11:15:34 AM)

stp: Enable tracking of NULL memory context

Similar to what's done in most of the OsmoCNI programs.
This allows dumpinng the NULL context using VTY command
'show talloc-context all'.

Change-Id: I4a925967e5bb61c346cf6c4dd2c89b6aaea44b94
Pau Espin Pedrol at

#20655 (Feb 26, 2026, 10:32:34 AM)

tcap: Support TID with length 1..4

As described in ITU Q.773 4.2.1.3:
"The length of a Transaction ID is 1 to 4 octets."

asn.1 files also describe TIDs the following way:
OrigTransactionID ::= [APPLICATION 8] IMPLICIT OCTET STRING (SIZE (1..4) )
DestTransactionID ::=[APPLICATION 9] IMPLICIT OCTET STRING (SIZE (1..4) )

Related: SYS#5423
Change-Id: I2748d85624e4be708f7554ee3e60a5bda9162845
Pau Espin Pedrol at

#20654 (Feb 26, 2026, 10:32:34 AM)

tcap: Lower log level failing to parse msg

invalid rx packets should be logged as NOTICED, not as ERROR.

Change-Id: Idef5736ee2481260f958eece2f5a3bfc009b3d69
Pau Espin Pedrol at

#20653 (Feb 26, 2026, 10:32:31 AM)

tcap: Support TID with length 1..4

As described in ITU Q.773 4.2.1.3:
"The length of a Transaction ID is 1 to 4 octets."

asn.1 files also describe TIDs the following way:
OrigTransactionID ::= [APPLICATION 8] IMPLICIT OCTET STRING (SIZE (1..4) )
DestTransactionID ::=[APPLICATION 9] IMPLICIT OCTET STRING (SIZE (1..4) )

Related: SYS#5423
Change-Id: I2748d85624e4be708f7554ee3e60a5bda9162845
Pau Espin Pedrol at

#20652 (Feb 26, 2026, 10:32:31 AM)

tcap: Lower log level failing to parse msg

invalid rx packets should be logged as NOTICED, not as ERROR.

Change-Id: Idef5736ee2481260f958eece2f5a3bfc009b3d69
Pau Espin Pedrol at

#20651 (Feb 26, 2026, 10:26:24 AM)

tcap: Fix return code in tcap_as_rx_sccp_asp()

That code path is not an error, simply the message is not TCAP.

Change-Id: I54c4a1bbaa8e107cf433cc898658a672c2b53c3c
Pau Espin Pedrol at

#20650 (Feb 26, 2026, 10:26:24 AM)

tcap: Support TID with length 1..4

As described in ITU Q.773 4.2.1.3:
"The length of a Transaction ID is 1 to 4 octets."

asn.1 files also describe TIDs the following way:
OrigTransactionID ::= [APPLICATION 8] IMPLICIT OCTET STRING (SIZE (1..4) )
DestTransactionID ::=[APPLICATION 9] IMPLICIT OCTET STRING (SIZE (1..4) )

Related: SYS#5423
Change-Id: I2748d85624e4be708f7554ee3e60a5bda9162845
Pau Espin Pedrol at

#20649 (Feb 26, 2026, 10:26:22 AM)

tcap: Lower log level failing to parse msg

invalid rx packets should be logged as NOTICED, not as ERROR.

Change-Id: Idef5736ee2481260f958eece2f5a3bfc009b3d69
Pau Espin Pedrol at

#20648 (Feb 26, 2026, 10:26:22 AM)

tcap: Fix return code in tcap_as_rx_sccp_asp()

That code path is not an error, simply the message is not TCAP.

Change-Id: I54c4a1bbaa8e107cf433cc898658a672c2b53c3c
Pau Espin Pedrol at

#20647 (Feb 26, 2026, 10:26:19 AM)

tcap: Support TID with length 1..4

As described in ITU Q.773 4.2.1.3:
"The length of a Transaction ID is 1 to 4 octets."

asn.1 files also describe TIDs the following way:
OrigTransactionID ::= [APPLICATION 8] IMPLICIT OCTET STRING (SIZE (1..4) )
DestTransactionID ::=[APPLICATION 9] IMPLICIT OCTET STRING (SIZE (1..4) )

Related: SYS#5423
Change-Id: I2748d85624e4be708f7554ee3e60a5bda9162845
Pau Espin Pedrol at

#20646 (Feb 26, 2026, 10:26:19 AM)

tcap: Lower log level failing to parse msg

invalid rx packets should be logged as NOTICED, not as ERROR.

Change-Id: Idef5736ee2481260f958eece2f5a3bfc009b3d69
Pau Espin Pedrol at

#20645 (Feb 25, 2026, 7:31:48 PM)

fix(threads): centralize portable strerror handling

- Move strerror_r portability logic to Utils
- Add strerror_buf() helper
- Simplify thread error logging in Threads.cpp

Change-Id: I642aff8a9f98823e117c4debd19384ddf5975039
dtv.comp at

#20644 (Feb 25, 2026, 7:31:48 PM)

fix(threads): centralize portable strerror handling

- Move strerror_r portability logic to Utils
- Add strerror_buf() helper
- Simplify thread error logging in Threads.cpp

Change-Id: I642aff8a9f98823e117c4debd19384ddf5975039
dtv.comp at

#20643 (Feb 25, 2026, 7:18:59 PM)

fix(threads): centralize portable strerror handling

- Move strerror_r portability logic to Utils
- Add strerror_buf() helper
- Simplify thread error logging in Threads.cpp

Change-Id: I642aff8a9f98823e117c4debd19384ddf5975039
dtv.comp at

#20642 (Feb 25, 2026, 7:18:58 PM)

fix(threads): centralize portable strerror handling

- Move strerror_r portability logic to Utils
- Add strerror_buf() helper
- Simplify thread error logging in Threads.cpp

Change-Id: I642aff8a9f98823e117c4debd19384ddf5975039
dtv.comp at

#20641 (Feb 25, 2026, 5:58:17 PM)

tcap: Avoid updating trans_track if AS doesn't have tcap-routing enabled

Change-Id: I0106df80f6c186b184bada8f06d38d0d54cce735
Pau Espin Pedrol at

#20640 (Feb 25, 2026, 5:58:15 PM)

tcap: Avoid updating trans_track if AS doesn't have tcap-routing enabled

Change-Id: I0106df80f6c186b184bada8f06d38d0d54cce735
Pau Espin Pedrol at

#20639 (Feb 25, 2026, 4:53:19 PM)

fix --disable-log-macros

Before 9197c1ac, the AC_ARG_ENABLE(log_macros, ...)
action was hardcoded to [log_macros="yes"], so *any*
use of the flag --enable-log-macros or --disable-log-macros
would set log_macros="yes" -> AC_DEFINE([LIBOSMOCORE_NO_LOGGING]).

The commit changed this to the standard [log_macros=$enableval], but
broke the conditional test, so
- AC_ARG_ENABLE sets $enableval to "no" for --disable-* flags
-> log_macros is now "no"
-> test fails
-> LIBOSMOCORE_NO_LOGGING is never defined...

The opposite of what it should do...

Change-Id: I809ab2f61e72428ba21061055296eb83d6d710ab
ewild at

#20638 (Feb 25, 2026, 4:53:16 PM)

core: fix config.h

While exploring why logging is disabled but still shows up in the binaries
I kind of wondered how all the config.h HAVE_XX checks we have everwhere work.
Apparently they do not work at all, due to missing or misplaced include of config.h.

This affects tons of other checks as well.

Change-Id: Ic2cf52a3b60f43a2f5d3fe01c41a41f6fd9a8000
ewild at

#20637 (Feb 25, 2026, 4:53:13 PM)

fix --disable-log-macros

Before 9197c1ac, the AC_ARG_ENABLE(log_macros, ...)
action was hardcoded to [log_macros="yes"], so *any*
use of the flag --enable-log-macros or --disable-log-macros
would set log_macros="yes" -> AC_DEFINE([LIBOSMOCORE_NO_LOGGING]).

The commit changed this to the standard [log_macros=$enableval], but
broke the conditional test, so
- AC_ARG_ENABLE sets $enableval to "no" for --disable-* flags
-> log_macros is now "no"
-> test fails
-> LIBOSMOCORE_NO_LOGGING is never defined...

The opposite of what it should do...

Change-Id: I809ab2f61e72428ba21061055296eb83d6d710ab
ewild at

#20636 (Feb 25, 2026, 4:53:07 PM)

core: fix config.h

While exploring why logging is disabled but still shows up in the binaries
I kind of wondered how all the config.h HAVE_XX checks we have everwhere work.
Apparently they do not work at all, due to missing or misplaced include of config.h.

This affects tons of other checks as well.

Change-Id: Ic2cf52a3b60f43a2f5d3fe01c41a41f6fd9a8000
ewild at

#20635 (Feb 25, 2026, 4:53:06 PM)

fix --disable-log-macros

Before 9197c1ac, the AC_ARG_ENABLE(log_macros, ...)
action was hardcoded to [log_macros="yes"], so *any*
use of the flag --enable-log-macros or --disable-log-macros
would set log_macros="yes" -> AC_DEFINE([LIBOSMOCORE_NO_LOGGING]).

The commit changed this to the standard [log_macros=$enableval], but
broke the conditional test, so
- AC_ARG_ENABLE sets $enableval to "no" for --disable-* flags
-> log_macros is now "no"
-> test fails
-> LIBOSMOCORE_NO_LOGGING is never defined...

The opposite of what it should do...

Change-Id: I809ab2f61e72428ba21061055296eb83d6d710ab
ewild at

#20634 (Feb 25, 2026, 4:53:03 PM)

core: fix config.h

While exploring why logging is disabled but still shows up in the binaries
I kind of wondered how all the config.h HAVE_XX checks we have everwhere work.
Apparently they do not work at all, due to missing or misplaced include of config.h.

This affects tons of other checks as well.

Change-Id: Ic2cf52a3b60f43a2f5d3fe01c41a41f6fd9a8000
ewild at

#20633 (Feb 25, 2026, 4:39:59 PM)

core: fix config.h

While exploring why logging is disabled but still shows up in the binaries
I kind of wondered how all the config.h HAVE_XX checks we have everwhere work.
Apparently they do not work at all, due to missing or misplaced include of config.h.

This affects tons of other checks as well.

Change-Id: Ic2cf52a3b60f43a2f5d3fe01c41a41f6fd9a8000
ewild at

#20632 (Feb 25, 2026, 4:39:59 PM)

fix --disable-log-macros

Before 9197c1ac, the AC_ARG_ENABLE(log_macros, ...)
action was hardcoded to [log_macros="yes"], so *any*
use of the flag --enable-log-macros or --disable-log-macros
would set log_macros="yes" -> AC_DEFINE([LIBOSMOCORE_NO_LOGGING]).

The commit changed this to the standard [log_macros=$enableval], but
broke the conditional test, so
- AC_ARG_ENABLE sets $enableval to "no" for --disable-* flags
-> log_macros is now "no"
-> test fails
-> LIBOSMOCORE_NO_LOGGING is never defined...

The opposite of what it should do...

Change-Id: I809ab2f61e72428ba21061055296eb83d6d710ab
ewild at

#20631 (Feb 25, 2026, 4:39:58 PM)

core: fix config.h

While exploring why logging is disabled but still shows up in the binaries
I kind of wondered how all the config.h HAVE_XX checks we have everwhere work.
Apparently they do not work at all, due to missing or misplaced include of config.h.

This affects tons of other checks as well.

Change-Id: Ic2cf52a3b60f43a2f5d3fe01c41a41f6fd9a8000
ewild at

#20630 (Feb 25, 2026, 4:39:58 PM)

fix --disable-log-macros

Before 9197c1ac, the AC_ARG_ENABLE(log_macros, ...)
action was hardcoded to [log_macros="yes"], so *any*
use of the flag --enable-log-macros or --disable-log-macros
would set log_macros="yes" -> AC_DEFINE([LIBOSMOCORE_NO_LOGGING]).

The commit changed this to the standard [log_macros=$enableval], but
broke the conditional test, so
- AC_ARG_ENABLE sets $enableval to "no" for --disable-* flags
-> log_macros is now "no"
-> test fails
-> LIBOSMOCORE_NO_LOGGING is never defined...

The opposite of what it should do...

Change-Id: I809ab2f61e72428ba21061055296eb83d6d710ab
ewild at

#20629 (Feb 25, 2026, 4:39:54 PM)

core: fix config.h

While exploring why logging is disabled but still shows up in the binaries
I kind of wondered how all the config.h HAVE_XX checks we have everwhere work.
Apparently they do not work at all, due to missing or misplaced include of config.h.

This affects tons of other checks as well.

Change-Id: Ic2cf52a3b60f43a2f5d3fe01c41a41f6fd9a8000
ewild at

#20628 (Feb 25, 2026, 4:39:54 PM)

fix --disable-log-macros

Before 9197c1ac, the AC_ARG_ENABLE(log_macros, ...)
action was hardcoded to [log_macros="yes"], so *any*
use of the flag --enable-log-macros or --disable-log-macros
would set log_macros="yes" -> AC_DEFINE([LIBOSMOCORE_NO_LOGGING]).

The commit changed this to the standard [log_macros=$enableval], but
broke the conditional test, so
- AC_ARG_ENABLE sets $enableval to "no" for --disable-* flags
-> log_macros is now "no"
-> test fails
-> LIBOSMOCORE_NO_LOGGING is never defined...

The opposite of what it should do...

Change-Id: I809ab2f61e72428ba21061055296eb83d6d710ab
ewild at

#20627 (Feb 25, 2026, 4:35:26 PM)

core: fix config.h

While exploring why logging is disabled but still shows up in the binaries
I kind of wondered how all the config.h HAVE_XX checks we have everwhere work.
Apparently they do not work at all, due to missing or misplaced include of config.h.

This affects tons of other checks as well.

Change-Id: Ic2cf52a3b60f43a2f5d3fe01c41a41f6fd9a8000
ewild at

#20626 (Feb 25, 2026, 4:34:44 PM)

fix --disable-log-macros

Before 9197c1ac, the AC_ARG_ENABLE(log_macros, ...)
action was hardcoded to [log_macros="yes"], so *any*
use of the flag --enable-log-macros or --disable-log-macros
would set log_macros="yes" -> AC_DEFINE([LIBOSMOCORE_NO_LOGGING]).

The commit changed this to the standard [log_macros=$enableval], but
broke the conditional test, so
- AC_ARG_ENABLE sets $enableval to "no" for --disable-* flags
-> log_macros is now "no"
-> test fails
-> LIBOSMOCORE_NO_LOGGING is never defined...

The opposite of what it should do...

Change-Id: I809ab2f61e72428ba21061055296eb83d6d710ab
ewild at

#20625 (Feb 25, 2026, 4:34:43 PM)

core: fix config.h

While exploring why logging is disabled but still shows up in the binaries
I kind of wondered how all the config.h HAVE_XX checks we have everwhere work.
Apparently they do not work at all, due to missing or misplaced include of config.h.

This affects tons of other checks as well.

Change-Id: Ic2cf52a3b60f43a2f5d3fe01c41a41f6fd9a8000
ewild at

#20624 (Feb 25, 2026, 4:34:43 PM)

fix --disable-log-macros

Before 9197c1ac, the AC_ARG_ENABLE(log_macros, ...)
action was hardcoded to [log_macros="yes"], so *any*
use of the flag --enable-log-macros or --disable-log-macros
would set log_macros="yes" -> AC_DEFINE([LIBOSMOCORE_NO_LOGGING]).

The commit changed this to the standard [log_macros=$enableval], but
broke the conditional test, so
- AC_ARG_ENABLE sets $enableval to "no" for --disable-* flags
-> log_macros is now "no"
-> test fails
-> LIBOSMOCORE_NO_LOGGING is never defined...

The opposite of what it should do...

Change-Id: I809ab2f61e72428ba21061055296eb83d6d710ab
ewild at

#20623 (Feb 25, 2026, 4:34:38 PM)

core: fix config.h

While exploring why logging is disabled but still shows up in the binaries
I kind of wondered how all the config.h HAVE_XX checks we have everwhere work.
Apparently they do not work at all, due to missing or misplaced include of config.h.

This affects tons of other checks as well.

Change-Id: Ic2cf52a3b60f43a2f5d3fe01c41a41f6fd9a8000
ewild at

#20622 (Feb 25, 2026, 4:34:38 PM)

fix --disable-log-macros

Before 9197c1ac, the AC_ARG_ENABLE(log_macros, ...)
action was hardcoded to [log_macros="yes"], so *any*
use of the flag --enable-log-macros or --disable-log-macros
would set log_macros="yes" -> AC_DEFINE([LIBOSMOCORE_NO_LOGGING]).

The commit changed this to the standard [log_macros=$enableval], but
broke the conditional test, so
- AC_ARG_ENABLE sets $enableval to "no" for --disable-* flags
-> log_macros is now "no"
-> test fails
-> LIBOSMOCORE_NO_LOGGING is never defined...

The opposite of what it should do...

Change-Id: I809ab2f61e72428ba21061055296eb83d6d710ab
ewild at

#20621 (Feb 25, 2026, 4:34:08 PM)

fix(threads): centralize portable strerror handling

- Move strerror_r portability logic to Utils
- Add strerror_buf() helper
- Add strerror_str() wrapper using std::error_code
- Simplify thread error logging in Threads.cpp

Change-Id: I642aff8a9f98823e117c4debd19384ddf5975039
dtv.comp at

#20620 (Feb 25, 2026, 4:34:04 PM)

fix(threads): centralize portable strerror handling

- Move strerror_r portability logic to Utils
- Add strerror_buf() helper
- Add strerror_str() wrapper using std::error_code
- Simplify thread error logging in Threads.cpp

Change-Id: I642aff8a9f98823e117c4debd19384ddf5975039
dtv.comp at

#20619 (Feb 25, 2026, 4:20:38 PM)

RTP: make ortp optional at compile time

It is now possible to run osmo-bts configure with --disable-ortp
option, which makes it use only twrtp library (integrated into
libosmo-netif) and removes all dependency on Belledonne software,
such that osmo-bts can be built on top of libosmo-abis that has also
been configured with its respective --disable-ortp option.

TODO: contrib/ber/rtp_ber utility still uses ortp and has no support
for twrtp or any other alternative - therefore, when osmo-bts is
configured with --disable-ortp, this utility is not built.

Related: OS#6474
Change-Id: Ib171bd42a65117457319befee2615e0c36c8d9e1
falcon at

#20618 (Feb 25, 2026, 4:20:33 PM)

RTP: make ortp optional at compile time

It is now possible to run osmo-bts configure with --disable-ortp
option, which makes it use only twrtp library (integrated into
libosmo-netif) and removes all dependency on Belledonne software,
such that osmo-bts can be built on top of libosmo-abis that has also
been configured with its respective --disable-ortp option.

TODO: contrib/ber/rtp_ber utility still uses ortp and has no support
for twrtp or any other alternative - therefore, when osmo-bts is
configured with --disable-ortp, this utility is not built.

Related: OS#6474
Change-Id: Ib171bd42a65117457319befee2615e0c36c8d9e1
falcon at

#20617 (Feb 25, 2026, 4:20:33 PM)

remove bogons from src/osmo-bts-oc2g/Makefile.am

This Makefile.am contained references to ORTP_CFLAGS and ORTP_LIBS,
which are bogons because our configure makes no pkg-config calls
for ortp, whether ortp support is included or excluded - instead
these pkg-config calls that produce ORTP_CFLAGS and ORTP_LIBS
happen only in libosmo-abis, while all subsequent ortp users in
Osmocom go through osmo_ortp shim provided by that library.

Related: OS#6474
Change-Id: Id9f091a42118393f973b982e18d1920f72bfcbb4
falcon at

#20616 (Feb 25, 2026, 4:20:32 PM)

remove bogons from src/osmo-bts-oc2g/Makefile.am

This Makefile.am contained references to ORTP_CFLAGS and ORTP_LIBS,
which are bogons because our configure makes no pkg-config calls
for ortp, whether ortp support is included or excluded - instead
these pkg-config calls that produce ORTP_CFLAGS and ORTP_LIBS
happen only in libosmo-abis, while all subsequent ortp users in
Osmocom go through osmo_ortp shim provided by that library.

Related: OS#6474
Change-Id: Id9f091a42118393f973b982e18d1920f72bfcbb4
falcon at

#20615 (Feb 25, 2026, 3:24:22 PM)

core: fix config.h

While exploring why logging is disabled but still shows up in the binaries
I kind of wondered how all the config.h HAVE_XX checks we have everwhere work.
Apparently they do not work at all, due to missing or misplaced include of config.h.

This affects tons of other checks as well.

Change-Id: Ic2cf52a3b60f43a2f5d3fe01c41a41f6fd9a8000
ewild at

#20614 (Feb 25, 2026, 3:24:22 PM)

core: fix config.h

While exploring why logging is disabled but still shows up in the binaries
I kind of wondered how all the config.h HAVE_XX checks we have everwhere work.
Apparently they do not work at all, due to missing or misplaced include of config.h.

This affects tons of other checks as well.

Change-Id: Ic2cf52a3b60f43a2f5d3fe01c41a41f6fd9a8000
ewild at

#20613 (Feb 25, 2026, 3:24:21 PM)

core: fix config.h

While exploring why logging is disabled but still shows up in the binaries
I kind of wondered how all the config.h HAVE_XX checks we have everwhere work.
Apparently they do not work at all, due to missing or misplaced include of config.h.

This affects tons of other checks as well.

Change-Id: Ic2cf52a3b60f43a2f5d3fe01c41a41f6fd9a8000
ewild at

#20612 (Feb 25, 2026, 2:11:17 PM)

checkpatch.conf: lint more code

The current linter configuration leads to too many linting errors, as
seen here:
https://gerrit.osmocom.org/c/osmo-trx/+/42198/comments/f8f1b5a2_3c7e1389

Fix this by not excluding files where the linter generates false
positives. But instead ignoring specific rules that generate these false
positives (mostly related to this being a C++ code base). The following
rules are now ignored:

* SPACING
  Fails on:
    std::vector<std::string>
  With:
    ERROR:SPACING: spaces required around that '<' (ctx:VxV)
    ERROR:SPACING: spaces required around that '>' (ctx:VxW)

* FUNCTION_ARGUMENTS
  Fails on:
    ScopedLock lock(mLock);
  With:
    WARNING:FUNCTION_ARGUMENTS: function definition argument 'mLock' should also have an identifier name

* INDENTED_LABEL
  Fails on:
    private:
    protected:
  With:
    WARNING:INDENTED_LABEL: labels should not be indented

* NEW_TYPEDEFS
  Fails on:
    typedef std::map<K,D*> Map;
  With:
    WARNING:NEW_TYPEDEFS: do not add new typedefs

With the new config, the linter only complains about the following
things across the existing code, which seem to be legitimate linting
problems (and if not, can be ignored as well):

  BRACES_NOT_NECESSARY, CODE_INDENT, LEADING_SPACE,
  MULTISTATEMENT_MACRO_USE_DO_WHILE, OPEN_BRACE, POINTER_LOCATION,
  PRINTF_I_OSMO, SINGLE_STATEMENT_DO_WHILE_MACRO, SPACE_BEFORE_TAB,
  STATIC_CONST_CHAR_ARRAY, TABSTOP, TRAILING_WHITESPACE

Change-Id: I0df5b6f2f0bf1469a80a1f5859809c30f523f683
Oliver Smith at

#20611 (Feb 25, 2026, 2:11:15 PM)

checkpatch.conf: lint more code

The current linter configuration leads to too many linting errors, as
seen here:
https://gerrit.osmocom.org/c/osmo-trx/+/42198/comments/f8f1b5a2_3c7e1389

Fix this by not excluding files where the linter generates false
positives. But instead ignoring specific rules that generate these false
positives (mostly related to this being a C++ code base). The following
rules are now ignored:

* SPACING
  Fails on:
    std::vector<std::string>
  With:
    ERROR:SPACING: spaces required around that '<' (ctx:VxV)
    ERROR:SPACING: spaces required around that '>' (ctx:VxW)

* FUNCTION_ARGUMENTS
  Fails on:
    ScopedLock lock(mLock);
  With:
    WARNING:FUNCTION_ARGUMENTS: function definition argument 'mLock' should also have an identifier name

* INDENTED_LABEL
  Fails on:
    private:
    protected:
  With:
    WARNING:INDENTED_LABEL: labels should not be indented

* NEW_TYPEDEFS
  Fails on:
    typedef std::map<K,D*> Map;
  With:
    WARNING:NEW_TYPEDEFS: do not add new typedefs

With the new config, the linter only complains about the following
things across the existing code, which seem to be legitimate linting
problems (and if not, can be ignored as well):

  BRACES_NOT_NECESSARY, CODE_INDENT, LEADING_SPACE,
  MULTISTATEMENT_MACRO_USE_DO_WHILE, OPEN_BRACE, POINTER_LOCATION,
  PRINTF_I_OSMO, SINGLE_STATEMENT_DO_WHILE_MACRO, SPACE_BEFORE_TAB,
  STATIC_CONST_CHAR_ARRAY, TABSTOP, TRAILING_WHITESPACE

Change-Id: I0df5b6f2f0bf1469a80a1f5859809c30f523f683
Oliver Smith at

#20610 (Feb 25, 2026, 1:32:31 PM)

fix --disable-log-macros

Before 9197c1ac, the AC_ARG_ENABLE(log_macros, ...)
action was hardcoded to [log_macros="yes"], so *any*
use of the flag --enable-log-macros or --disable-log-macros
would set log_macros="yes" -> AC_DEFINE([LIBOSMOCORE_NO_LOGGING]).

The commit changed this to the standard [log_macros=$enableval], but
broke the conditional test, so
- AC_ARG_ENABLE sets $enableval to "no" for --disable-* flags
-> log_macros is now "no"
-> test fails
-> LIBOSMOCORE_NO_LOGGING is never defined...

The opposite of what it should do...

Change-Id: I809ab2f61e72428ba21061055296eb83d6d710ab
ewild at

#20609 (Feb 25, 2026, 1:32:31 PM)

fix --disable-log-macros

Before 9197c1ac, the AC_ARG_ENABLE(log_macros, ...)
action was hardcoded to [log_macros="yes"], so *any*
use of the flag --enable-log-macros or --disable-log-macros
would set log_macros="yes" -> AC_DEFINE([LIBOSMOCORE_NO_LOGGING]).

The commit changed this to the standard [log_macros=$enableval], but
broke the conditional test, so
- AC_ARG_ENABLE sets $enableval to "no" for --disable-* flags
-> log_macros is now "no"
-> test fails
-> LIBOSMOCORE_NO_LOGGING is never defined...

The opposite of what it should do...

Change-Id: I809ab2f61e72428ba21061055296eb83d6d710ab
ewild at

#20608 (Feb 25, 2026, 1:32:30 PM)

fix --disable-log-macros

Before 9197c1ac, the AC_ARG_ENABLE(log_macros, ...)
action was hardcoded to [log_macros="yes"], so *any*
use of the flag --enable-log-macros or --disable-log-macros
would set log_macros="yes" -> AC_DEFINE([LIBOSMOCORE_NO_LOGGING]).

The commit changed this to the standard [log_macros=$enableval], but
broke the conditional test, so
- AC_ARG_ENABLE sets $enableval to "no" for --disable-* flags
-> log_macros is now "no"
-> test fails
-> LIBOSMOCORE_NO_LOGGING is never defined...

The opposite of what it should do...

Change-Id: I809ab2f61e72428ba21061055296eb83d6d710ab
ewild at

#20607 (Feb 25, 2026, 10:34:22 AM)

bankd: csv: fix crash on invalid lines

When no valid csv line is given (e.g. without any commas),
bankd will crash when trying to compile a regex with NULL.

Change-Id: Id6059c7dd4a119ffb1658a6cd7345a40bef3a69f
lynxis at

#20606 (Feb 25, 2026, 10:34:20 AM)

bankd: csv: fix crash on invalid lines

When no valid csv line is given (e.g. without any commas),
bankd will crash when trying to compile a regex with NULL.

Change-Id: Id6059c7dd4a119ffb1658a6cd7345a40bef3a69f
lynxis at

#20605 (Feb 25, 2026, 10:34:15 AM)

bankd: csv: fail on invalid csv lines

Instead of ignoring invalid regex and non-existent
regex for reader.

Change-Id: If10889b43c99adb99d0b7dcdb4287952c3a93d69
lynxis at

#20604 (Feb 25, 2026, 10:34:14 AM)

bankd: csv: fail on invalid csv lines

Instead of ignoring invalid regex and non-existent
regex for reader.

Change-Id: If10889b43c99adb99d0b7dcdb4287952c3a93d69
lynxis at

#20603 (Feb 25, 2026, 8:47:45 AM)

fix(threads): support GNU and POSIX strerror_r variants

- Add required headers
- Use correct handling for GNU-specific strerror_r
- Provide fallback error string for portability

Change-Id: I642aff8a9f98823e117c4debd19384ddf5975039
dtv.comp at

#20602 (Feb 25, 2026, 8:47:44 AM)

fix(threads): support GNU and POSIX strerror_r variants

- Add required headers
- Use correct handling for GNU-specific strerror_r
- Provide fallback error string for portability

Change-Id: I642aff8a9f98823e117c4debd19384ddf5975039
dtv.comp at

#20601 (Feb 25, 2026, 6:31:55 AM)

feat(usdr): add USDR backend support (osmo-trx-usdr)

- Implement USDRDevice backend for Transceiver52M
- Add --with-usdr configure option and build integration
- Add systemd service unit (osmo-trx-usdr.service)
- Add Debian packaging files for osmo-trx-usdr
- Provide example configuration file
- Extend manuals and device documentation with USDR backend section

Change-Id: I5d1d25921514954c4929ae6e7352168b3ceb05df
dtv.comp at

#20600 (Feb 25, 2026, 6:31:53 AM)

feat(usdr): add USDR backend support (osmo-trx-usdr)

- Implement USDRDevice backend for Transceiver52M
- Add --with-usdr configure option and build integration
- Add systemd service unit (osmo-trx-usdr.service)
- Add Debian packaging files for osmo-trx-usdr
- Provide example configuration file
- Extend manuals and device documentation with USDR backend section

Change-Id: I5d1d25921514954c4929ae6e7352168b3ceb05df
dtv.comp at

#20599 (Feb 24, 2026, 10:06:33 PM)

feat(usdr): add USDR backend support (osmo-trx-usdr)

- Implement USDRDevice backend for Transceiver52M
- Add --with-usdr configure option and build integration
- Add systemd service unit (osmo-trx-usdr.service)
- Add Debian packaging files for osmo-trx-usdr
- Provide example configuration file
- Extend manuals and device documentation with USDR backend section

Change-Id: I5d1d25921514954c4929ae6e7352168b3ceb05df
dtv.comp at

#20598 (Feb 24, 2026, 10:06:31 PM)

feat(usdr): add USDR backend support (osmo-trx-usdr)

- Implement USDRDevice backend for Transceiver52M
- Add --with-usdr configure option and build integration
- Add systemd service unit (osmo-trx-usdr.service)
- Add Debian packaging files for osmo-trx-usdr
- Provide example configuration file
- Extend manuals and device documentation with USDR backend section

Change-Id: I5d1d25921514954c4929ae6e7352168b3ceb05df
dtv.comp at

#20597 (Feb 24, 2026, 10:01:33 PM)

feat(usdr): add USDR backend support (osmo-trx-usdr)

- Implement USDRDevice backend for Transceiver52M
- Add --with-usdr configure option and build integration
- Add systemd service unit (osmo-trx-usdr.service)
- Add Debian packaging files for osmo-trx-usdr
- Provide example configuration file
- Extend manuals and device documentation with USDR backend section

Change-Id: I5d1d25921514954c4929ae6e7352168b3ceb05df
dtv.comp at

#20596 (Feb 24, 2026, 10:01:31 PM)

feat(usdr): add USDR backend support (osmo-trx-usdr)

- Implement USDRDevice backend for Transceiver52M
- Add --with-usdr configure option and build integration
- Add systemd service unit (osmo-trx-usdr.service)
- Add Debian packaging files for osmo-trx-usdr
- Provide example configuration file
- Extend manuals and device documentation with USDR backend section

Change-Id: I5d1d25921514954c4929ae6e7352168b3ceb05df
dtv.comp at

#20595 (Feb 24, 2026, 6:57:43 PM)

RTP: make ortp optional at compile time

It is now possible to run osmo-bts configure with --disable-ortp
option, which makes it use only twrtp library (integrated into
libosmo-netif) and removes all dependency on Belledonne software,
such that osmo-bts can be built on top of libosmo-abis that has also
been configured with its respective --disable-ortp option.

TODO: contrib/ber/rtp_ber utility still uses ortp and has no support
for twrtp or any other alternative - therefore, when osmo-bts is
configured with --disable-ortp, this utility is not built.

Related: OS#6474
Change-Id: Ib171bd42a65117457319befee2615e0c36c8d9e1
falcon at

#20594 (Feb 24, 2026, 6:57:43 PM)

RTP: make ortp optional at compile time

It is now possible to run osmo-bts configure with --disable-ortp
option, which makes it use only twrtp library (integrated into
libosmo-netif) and removes all dependency on Belledonne software,
such that osmo-bts can be built on top of libosmo-abis that has also
been configured with its respective --disable-ortp option.

TODO: contrib/ber/rtp_ber utility still uses ortp and has no support
for twrtp or any other alternative - therefore, when osmo-bts is
configured with --disable-ortp, this utility is not built.

Related: OS#6474
Change-Id: Ib171bd42a65117457319befee2615e0c36c8d9e1
falcon at

#20593 (Feb 24, 2026, 6:21:50 PM)

RTP: add vty option for ortp vs twrtp selection

With this patch it finally becomes possible for the user to select
which RTP library should be used: ortp or twrtp.  ortp is still
the default for now, in order to not alter behavior for existing
installations until twrtp receives more real world testing by users
beyond the original author.  Future patches may change the default
or even remove ortp support altogether - but twrtp should receive
more testing as a user opt-in feature first.

Related: OS#6474
Change-Id: Iff4e3a399250c16ba8fe4cb12e4e22f4c6b346ec
falcon at

#20592 (Feb 24, 2026, 6:21:50 PM)

RTP: make ortp optional at compile time

It is now possible to run osmo-bts configure with --disable-ortp
option, which makes it use only twrtp library (integrated into
libosmo-netif) and removes all dependency on Belledonne software,
such that osmo-bts can be built on top of libosmo-abis that has also
been configured with its respective --disable-ortp option.

TODO: contrib/ber/rtp_ber utility still uses ortp and has no support
for twrtp or any other alternative - therefore, when osmo-bts is
configured with --disable-ortp, this utility is not built.

Related: OS#6474
Change-Id: Ib171bd42a65117457319befee2615e0c36c8d9e1
falcon at

#20591 (Feb 24, 2026, 6:21:49 PM)

RTP: add vty option for ortp vs twrtp selection

With this patch it finally becomes possible for the user to select
which RTP library should be used: ortp or twrtp.  ortp is still
the default for now, in order to not alter behavior for existing
installations until twrtp receives more real world testing by users
beyond the original author.  Future patches may change the default
or even remove ortp support altogether - but twrtp should receive
more testing as a user opt-in feature first.

Related: OS#6474
Change-Id: Iff4e3a399250c16ba8fe4cb12e4e22f4c6b346ec
falcon at

#20590 (Feb 24, 2026, 6:21:48 PM)

RTP: make ortp optional at compile time

It is now possible to run osmo-bts configure with --disable-ortp
option, which makes it use only twrtp library (integrated into
libosmo-netif) and removes all dependency on Belledonne software,
such that osmo-bts can be built on top of libosmo-abis that has also
been configured with its respective --disable-ortp option.

TODO: contrib/ber/rtp_ber utility still uses ortp and has no support
for twrtp or any other alternative - therefore, when osmo-bts is
configured with --disable-ortp, this utility is not built.

Related: OS#6474
Change-Id: Ib171bd42a65117457319befee2615e0c36c8d9e1
falcon at

#20589 (Feb 24, 2026, 10:54:00 AM)

stream: Improve error handling and logging in write_cb

Nowhere in man 2 write/send/sendmsg it can be read that a return of 0
is actually an error, so avoid handling that case as error in
stream_cli.

While at ti, log the errno string.

Change-Id: I68468f0452cbc86b6210bbd1dbfa251579270adb
Pau Espin Pedrol at

#20588 (Feb 24, 2026, 10:53:53 AM)

stream: Improve error handling and logging in write_cb

Nowhere in man 2 write/send/sendmsg it can be read that a return of 0
is actually an error, so avoid handling that case as error in
stream_cli.

While at ti, log the errno string.

Change-Id: I68468f0452cbc86b6210bbd1dbfa251579270adb
Pau Espin Pedrol at

#20587 (Feb 24, 2026, 10:53:49 AM)

stream: Improve error handling and logging in write_cb

Nowhere in man 2 write/send/sendmsg it can be read that a return of 0
is actually an error, so avoid handling that case as error in
stream_cli.

While at ti, log the errno string.

Change-Id: I68468f0452cbc86b6210bbd1dbfa251579270adb
Pau Espin Pedrol at

#20586 (Feb 24, 2026, 10:36:20 AM)

stream_cli: Log errno string if write failed

Change-Id: I68468f0452cbc86b6210bbd1dbfa251579270adb
Pau Espin Pedrol at

#20585 (Feb 24, 2026, 10:36:19 AM)

stream_cli: Log errno string if write failed

Change-Id: I68468f0452cbc86b6210bbd1dbfa251579270adb
Pau Espin Pedrol at

#20584 (Feb 24, 2026, 10:36:17 AM)

stream_cli: Log errno string if write failed

Change-Id: I68468f0452cbc86b6210bbd1dbfa251579270adb
Pau Espin Pedrol at

#20583 (Feb 24, 2026, 6:53:02 AM)

sigtran-osmocom.adoc: Describe tcap-aware loadshare

Change-Id: I58979e8f6c5156706b1016069eaaf2801ec9311b
Related: OS#5423
dwillmann at

#20582 (Feb 24, 2026, 6:53:00 AM)

sigtran-osmocom.adoc: Describe tcap-aware loadshare

Change-Id: I58979e8f6c5156706b1016069eaaf2801ec9311b
Related: OS#5423
dwillmann at

#20581 (Feb 23, 2026, 8:14:50 PM)

RTP: add vty option for ortp vs twrtp selection

With this patch it finally becomes possible for the user to select
which RTP library should be used: ortp or twrtp.  ortp is still
the default for now, in order to not alter behavior for existing
installations until twrtp receives more real world testing by users
beyond the original author.  Future patches may change the default
or even remove ortp support altogether - but twrtp should receive
more testing as a user opt-in feature first.

Related: OS#6474
Change-Id: Iff4e3a399250c16ba8fe4cb12e4e22f4c6b346ec
falcon at

#20580 (Feb 23, 2026, 8:14:44 PM)

RTP: add vty option for ortp vs twrtp selection

With this patch it finally becomes possible for the user to select
which RTP library should be used: ortp or twrtp.  ortp is still
the default for now, in order to not alter behavior for existing
installations until twrtp receives more real world testing by users
beyond the original author.  Future patches may change the default
or even remove ortp support altogether - but twrtp should receive
more testing as a user opt-in feature first.

Related: OS#6474
Change-Id: Iff4e3a399250c16ba8fe4cb12e4e22f4c6b346ec
falcon at

#20579 (Feb 23, 2026, 7:53:33 PM)

RTP: use new abstraction layer instead of direct osmo_ortp

As of this patch in the series, the RTP library in active use
is still always ortp, but all BTS code now accesses it through
the new abstraction layer, paving the way for twrtp option.

Related: OS#6474
Change-Id: I5e3de4f84e8e8875437cb94a9b8feeb07f9cc1cf
falcon at

#20578 (Feb 23, 2026, 7:53:33 PM)

RTP: add vty option for ortp vs twrtp selection

With this patch it finally becomes possible for the user to select
which RTP library should be used: ortp or twrtp.  ortp is still
the default for now, in order to not alter behavior for existing
installations until twrtp receives more real world testing by users
beyond the original author.  Future patches may change the default
or even remove ortp support altogether - but twrtp should receive
more testing as a user opt-in feature first.

Related: OS#6474
Change-Id: Iff4e3a399250c16ba8fe4cb12e4e22f4c6b346ec
falcon at

#20577 (Feb 23, 2026, 7:53:32 PM)

RTP: implement RTP socket abstraction layer

This abstraction layer is another step toward supporting a choice
between legacy Belledonne ortp and Osmocom-integrated twrtp.

Related: OS#6474
Depends: Ibda74c0dbfb163f5d0e3fb13f593a6e2c6817673 (libosmo-netif.git)
Change-Id: Ic945f6d753ec7f5c0ac5cecc9f71049464de7e8f
falcon at

#20576 (Feb 23, 2026, 7:53:32 PM)

RTP: use new abstraction layer instead of direct osmo_ortp

As of this patch in the series, the RTP library in active use
is still always ortp, but all BTS code now accesses it through
the new abstraction layer, paving the way for twrtp option.

Related: OS#6474
Change-Id: I5e3de4f84e8e8875437cb94a9b8feeb07f9cc1cf
falcon at

#20575 (Feb 23, 2026, 7:53:31 PM)

RTP: add vty option for ortp vs twrtp selection

With this patch it finally becomes possible for the user to select
which RTP library should be used: ortp or twrtp.  ortp is still
the default for now, in order to not alter behavior for existing
installations until twrtp receives more real world testing by users
beyond the original author.  Future patches may change the default
or even remove ortp support altogether - but twrtp should receive
more testing as a user opt-in feature first.

Related: OS#6474
Change-Id: Iff4e3a399250c16ba8fe4cb12e4e22f4c6b346ec
falcon at

#20574 (Feb 23, 2026, 7:53:31 PM)

RTP: implement RTP socket abstraction layer

This abstraction layer is another step toward supporting a choice
between legacy Belledonne ortp and Osmocom-integrated twrtp.

Related: OS#6474
Depends: Ibda74c0dbfb163f5d0e3fb13f593a6e2c6817673 (libosmo-netif.git)
Change-Id: Ic945f6d753ec7f5c0ac5cecc9f71049464de7e8f
falcon at

#20573 (Feb 22, 2026, 4:55:19 AM)

RTP: add vty option for ortp vs twrtp selection

With this patch it finally becomes possible for the user to select
which RTP library should be used: ortp or twrtp.  ortp is still
the default for now, in order to not alter behavior for existing
installations until twrtp receives more real world testing by users
beyond the original author.  Future patches may change the default
or even remove ortp support altogether - but twrtp should receive
more testing as a user opt-in feature first.

Related: OS#6474
Change-Id: Iff4e3a399250c16ba8fe4cb12e4e22f4c6b346ec
falcon at

#20572 (Feb 22, 2026, 4:55:18 AM)

RTP: add vty option for ortp vs twrtp selection

With this patch it finally becomes possible for the user to select
which RTP library should be used: ortp or twrtp.  ortp is still
the default for now, in order to not alter behavior for existing
installations until twrtp receives more real world testing by users
beyond the original author.  Future patches may change the default
or even remove ortp support altogether - but twrtp should receive
more testing as a user opt-in feature first.

Related: OS#6474
Change-Id: Iff4e3a399250c16ba8fe4cb12e4e22f4c6b346ec
falcon at

#20571 (Feb 22, 2026, 4:44:33 AM)

RTP: add vty option for ortp vs twrtp selection

With this patch it finally becomes possible for the user to select
which RTP library should be used: ortp or twrtp.  ortp is still
the default for now, in order to not alter behavior for existing
installations until twrtp receives more real world testing by users
beyond the original author.  Future patches may change the default
or even remove ortp support altogether - but twrtp should receive
more testing as a user opt-in feature first.

Related: OS#6474
Change-Id: Iff4e3a399250c16ba8fe4cb12e4e22f4c6b346ec
falcon at

#20570 (Feb 22, 2026, 4:44:32 AM)

RTP: add vty option for ortp vs twrtp selection

With this patch it finally becomes possible for the user to select
which RTP library should be used: ortp or twrtp.  ortp is still
the default for now, in order to not alter behavior for existing
installations until twrtp receives more real world testing by users
beyond the original author.  Future patches may change the default
or even remove ortp support altogether - but twrtp should receive
more testing as a user opt-in feature first.

Related: OS#6474
Change-Id: Iff4e3a399250c16ba8fe4cb12e4e22f4c6b346ec
falcon at

#20569 (Feb 22, 2026, 4:38:03 AM)

RTP: use new abstraction layer instead of direct osmo_ortp

As of this patch in the series, the RTP library in active use
is still always ortp, but all BTS code now accesses it through
the new abstraction layer, paving the way for twrtp option.

Related: OS#6474
Change-Id: I5e3de4f84e8e8875437cb94a9b8feeb07f9cc1cf
falcon at

#20568 (Feb 22, 2026, 4:38:02 AM)

RTP: use new abstraction layer instead of direct osmo_ortp

As of this patch in the series, the RTP library in active use
is still always ortp, but all BTS code now accesses it through
the new abstraction layer, paving the way for twrtp option.

Related: OS#6474
Change-Id: I5e3de4f84e8e8875437cb94a9b8feeb07f9cc1cf
falcon at

#20567 (Feb 22, 2026, 4:24:45 AM)

RTP: implement RTP socket abstraction layer

This abstraction layer is another step toward supporting a choice
between legacy Belledonne ortp and Osmocom-integrated twrtp.

Related: OS#6474
Depends: Ibda74c0dbfb163f5d0e3fb13f593a6e2c6817673 (libosmo-netif.git)
Change-Id: Ic945f6d753ec7f5c0ac5cecc9f71049464de7e8f
falcon at

#20566 (Feb 22, 2026, 4:24:41 AM)

RTP: implement RTP socket abstraction layer

This abstraction layer is another step toward supporting a choice
between legacy Belledonne ortp and Osmocom-integrated twrtp.

Related: OS#6474
Depends: Ibda74c0dbfb163f5d0e3fb13f593a6e2c6817673 (libosmo-netif.git)
Change-Id: Ic945f6d753ec7f5c0ac5cecc9f71049464de7e8f
falcon at

#20565 (Feb 22, 2026, 4:17:26 AM)

RTP: implement RTP socket abstraction layer

This abstraction layer is another step toward supporting a choice
between legacy Belledonne ortp and Osmocom-integrated twrtp.

Related: OS#6474
Depends: Ibda74c0dbfb163f5d0e3fb13f593a6e2c6817673 (libosmo-netif.git)
Change-Id: Ic945f6d753ec7f5c0ac5cecc9f71049464de7e8f
falcon at

#20564 (Feb 22, 2026, 4:17:26 AM)

RTP: implement RTP socket abstraction layer

This abstraction layer is another step toward supporting a choice
between legacy Belledonne ortp and Osmocom-integrated twrtp.

Related: OS#6474
Depends: Ibda74c0dbfb163f5d0e3fb13f593a6e2c6817673 (libosmo-netif.git)
Change-Id: Ic945f6d753ec7f5c0ac5cecc9f71049464de7e8f
falcon at

#20563 (Feb 22, 2026, 4:08:10 AM)

RTP: add vty configuration for twjit

This patch is the first step in the series adding the ability to use
twrtp+twjit instead of Belledonne ortp.  twjit requires vty config
for tunable parameters - add this config.  Actual use of this added
config will happen in subsequent patches.

Related: OS#6474
Change-Id: I9ccd060fce8416e01356fccd9ae465a7298a9ce5
falcon at

#20562 (Feb 22, 2026, 4:08:08 AM)

RTP: add vty configuration for twjit

This patch is the first step in the series adding the ability to use
twrtp+twjit instead of Belledonne ortp.  twjit requires vty config
for tunable parameters - add this config.  Actual use of this added
config will happen in subsequent patches.

Related: OS#6474
Change-Id: I9ccd060fce8416e01356fccd9ae465a7298a9ce5
falcon at

#20561 (Feb 22, 2026, 3:38:26 AM)

RTP: use new abstraction layer instead of direct osmo_ortp

As of this patch in the series, the RTP library in active use
is still always ortp, but all BTS code now accesses it through
the new abstraction layer, paving the way for twrtp option.

Related: OS#6474
Change-Id: I5e3de4f84e8e8875437cb94a9b8feeb07f9cc1cf
falcon at

#20560 (Feb 22, 2026, 3:38:26 AM)

RTP: add vty configuration for twjit

This patch is the first step in the series adding the ability to use
twrtp+twjit instead of Belledonne ortp.  twjit requires vty config
for tunable parameters - add this config.  Actual use of this added
config will happen in subsequent patches.

Related: OS#6474
Change-Id: I9ccd060fce8416e01356fccd9ae465a7298a9ce5
falcon at

#20559 (Feb 22, 2026, 3:38:26 AM)

RTP: implement RTP socket abstraction layer

This abstraction layer is another step toward supporting a choice
between legacy Belledonne ortp and Osmocom-integrated twrtp.

Related: OS#6474
Depends: Ibda74c0dbfb163f5d0e3fb13f593a6e2c6817673 (libosmo-netif.git)
Change-Id: Ic945f6d753ec7f5c0ac5cecc9f71049464de7e8f
falcon at

#20558 (Feb 22, 2026, 3:38:23 AM)

RTP: add vty option for ortp vs twrtp selection

With this patch it finally becomes possible for the user to select
which RTP library should be used: ortp or twrtp.  ortp is still
the default for now, in order to not alter behavior for existing
installations until twrtp receives more real world testing by users
beyond the original author.  Future patches may change the default
or even remove ortp support altogether - but twrtp should receive
more testing as a user opt-in feature first.

Related: OS#6474
Change-Id: Iff4e3a399250c16ba8fe4cb12e4e22f4c6b346ec
falcon at

#20557 (Feb 22, 2026, 3:38:23 AM)

RTP: implement RTP socket abstraction layer

This abstraction layer is another step toward supporting a choice
between legacy Belledonne ortp and Osmocom-integrated twrtp.

Related: OS#6474
Depends: Ibda74c0dbfb163f5d0e3fb13f593a6e2c6817673 (libosmo-netif.git)
Change-Id: Ic945f6d753ec7f5c0ac5cecc9f71049464de7e8f
falcon at

#20556 (Feb 22, 2026, 3:38:22 AM)

RTP: use new abstraction layer instead of direct osmo_ortp

As of this patch in the series, the RTP library in active use
is still always ortp, but all BTS code now accesses it through
the new abstraction layer, paving the way for twrtp option.

Related: OS#6474
Change-Id: I5e3de4f84e8e8875437cb94a9b8feeb07f9cc1cf
falcon at

#20555 (Feb 22, 2026, 3:38:22 AM)

RTP: add vty configuration for twjit

This patch is the first step in the series adding the ability to use
twrtp+twjit instead of Belledonne ortp.  twjit requires vty config
for tunable parameters - add this config.  Actual use of this added
config will happen in subsequent patches.

Related: OS#6474
Change-Id: I9ccd060fce8416e01356fccd9ae465a7298a9ce5
falcon at

#20554 (Feb 22, 2026, 3:38:20 AM)

RTP: add vty option for ortp vs twrtp selection

With this patch it finally becomes possible for the user to select
which RTP library should be used: ortp or twrtp.  ortp is still
the default for now, in order to not alter behavior for existing
installations until twrtp receives more real world testing by users
beyond the original author.  Future patches may change the default
or even remove ortp support altogether - but twrtp should receive
more testing as a user opt-in feature first.

Related: OS#6474
Change-Id: Iff4e3a399250c16ba8fe4cb12e4e22f4c6b346ec
falcon at

#20553 (Feb 20, 2026, 12:32:54 PM)

Bump version: 1.1.2 → 1.1.3

Change-Id: I4ffcc7d6bba6fd86525dd93fc8c643d50d81b7f0
Oliver Smith at

#20552 (Feb 20, 2026, 12:32:54 PM)

Bump version: 1.1.2 → 1.1.3

Change-Id: I4ffcc7d6bba6fd86525dd93fc8c643d50d81b7f0
Oliver Smith at

#20551 (Feb 20, 2026, 10:58:21 AM)

Bump version: 1.1.2 → 1.1.3

Change-Id: Ibc9d5efa85def78cfc3f1f09f0cde46aa7cfbd3c
Oliver Smith at

#20550 (Feb 20, 2026, 10:58:19 AM)

Bump version: 1.1.2 → 1.1.3

Change-Id: Ibc9d5efa85def78cfc3f1f09f0cde46aa7cfbd3c
Oliver Smith at

#20549 (Feb 20, 2026, 9:58:48 AM)

tcap: vty: Fix writing tcap-routing command

Change-Id: I36d23c0e330c224b69094fb861520c4a4a32b3d8
Pau Espin Pedrol at

#20548 (Feb 20, 2026, 9:58:48 AM)

tcap: vty: Fix writing tcap-routing command

Change-Id: I36d23c0e330c224b69094fb861520c4a4a32b3d8
Pau Espin Pedrol at

#20547 (Feb 19, 2026, 5:35:49 PM)

rspro_server: fix releasing timed out clients

Fix crash on reconnects of clients if they timed out.

The duplicate check will use conn->peer of the old peer,
but conn->peer is NULL because rspro_client_conn_destroy() never destroys
the connection if conn->peer is valid when rspro_client_conn_destroy() is called.

void rspro_client_conn_destroy(conn)
{
if (conn->peer) {
peer = conn->peer;
conn->peer = NULL;
osmo_stream_srv_destroy(peer); /* calls sock_closed_cb()
}
[..]
}

int sock_closed_cb(peer)
{
[..]
if (conn->peer) {
osmo_fsm_inst_dispatch(conn->fi, CLNTC_E_TCP_DOWN, NULL); /* calls in the end rspro_client_conn_destroy() */
}
return 0;
}

Re-organize the clean up:
* rspro_client_conn_destroy() will be only called by the FSM clean up
* closed_cb will inform the fi to clean up

Fixes: 8cfe1d808a57 ("Use new osmo_ipa_ka_fsm_inst APIs from libosmo-netif")
Related: OS#6957
Change-Id: I1f7faf5ffdd909362c492ab434b63fa7e79ada95
lynxis at

#20546 (Feb 19, 2026, 5:35:47 PM)

rspro_server: fix releasing timed out clients

Fix crash on reconnects of clients if they timed out.

The duplicate check will use conn->peer of the old peer,
but conn->peer is NULL because rspro_client_conn_destroy() never destroys
the connection if conn->peer is valid when rspro_client_conn_destroy() is called.

void rspro_client_conn_destroy(conn)
{
if (conn->peer) {
peer = conn->peer;
conn->peer = NULL;
osmo_stream_srv_destroy(peer); /* calls sock_closed_cb()
}
[..]
}

int sock_closed_cb(peer)
{
[..]
if (conn->peer) {
osmo_fsm_inst_dispatch(conn->fi, CLNTC_E_TCP_DOWN, NULL); /* calls in the end rspro_client_conn_destroy() */
}
return 0;
}

Re-organize the clean up:
* rspro_client_conn_destroy() will be only called by the FSM clean up
* closed_cb will inform the fi to clean up

Fixes: 8cfe1d808a57 ("Use new osmo_ipa_ka_fsm_inst APIs from libosmo-netif")
Related: OS#6957
Change-Id: I1f7faf5ffdd909362c492ab434b63fa7e79ada95
lynxis at

#20545 (Feb 19, 2026, 1:13:21 PM)

Bump version: 1.10.0.36-b9839-dirty → 1.11.0

Change-Id: I595b31071a071bfa5666931d99e24e9b56877a6f
Pau Espin Pedrol at

#20544 (Feb 19, 2026, 1:13:21 PM)

Bump version: 1.10.0.36-b9839-dirty → 1.11.0

Change-Id: I595b31071a071bfa5666931d99e24e9b56877a6f
Pau Espin Pedrol at

#20543 (Feb 19, 2026, 12:56:43 PM)

Add [no ]force-cell-sel-ind-after-rel

Change-Id: Ie5fa3e036e0a0dd4049a4230d6cd4cb7c158088e
Related: SYS#7482
Vadim Yanitskiy at

#20542 (Feb 19, 2026, 12:56:43 PM)

Add [no ]force-cell-sel-ind-after-rel

Change-Id: Ie5fa3e036e0a0dd4049a4230d6cd4cb7c158088e
Related: SYS#7482
Vadim Yanitskiy at

#20541 (Feb 19, 2026, 12:27:07 PM)

Bump version: 1.10.0.36-b9839-dirty → 1.11.0

Change-Id: I595b31071a071bfa5666931d99e24e9b56877a6f
Pau Espin Pedrol at

#20540 (Feb 19, 2026, 12:27:07 PM)

Bump version: 1.10.0.36-b9839-dirty → 1.11.0

Change-Id: I595b31071a071bfa5666931d99e24e9b56877a6f
Pau Espin Pedrol at

#20539 (Feb 19, 2026, 12:17:13 PM)

Bump version: 1.8.0.3-9533 → 1.8.1

Change-Id: I44a6d0216f2a8ea4a536374c99cfedfbec75eabf
Pau Espin Pedrol at

#20538 (Feb 19, 2026, 12:17:12 PM)

Bump version: 1.8.0.3-9533 → 1.8.1

Change-Id: I44a6d0216f2a8ea4a536374c99cfedfbec75eabf
Pau Espin Pedrol at

#20537 (Feb 19, 2026, 12:12:23 PM)

Bump version: 0.5.2.4-2463 → 0.5.3

Change-Id: I36a3c6219bbd4f7dc13b5d5e40687d3f61aa02d5
Pau Espin Pedrol at

#20536 (Feb 19, 2026, 12:12:22 PM)

Bump version: 0.5.2.4-2463 → 0.5.3

Change-Id: I36a3c6219bbd4f7dc13b5d5e40687d3f61aa02d5
Pau Espin Pedrol at

#20535 (Feb 19, 2026, 12:04:05 PM)

Bump version: 1.14.0.10-44efd → 1.14.1

Change-Id: I2a3907eabebc7f282f0a00d50b11894847669c1f
Pau Espin Pedrol at

#20534 (Feb 19, 2026, 12:04:02 PM)

ipaccess-config-e1-driver: Make sure struct input_signal_data is zero initialized

Change-Id: If97c4a4202eaf96446d48e821d5e59c98bafe51c
(cherry picked from commit 37929c0886be2fa71aadadc571ee024c3d54a3a6)
Pau Espin Pedrol at

#20533 (Feb 19, 2026, 12:04:02 PM)

assignment_fsm: Fix use-after-free of lchan->conn

Scenario:
* A DYNAMIC/OSMOCOM TS in PDCH mode is selected to be used for TCH/F,
  hence the TS is being switched to TCH/F: RF Channel Release is being
  transmitted and waiting to receive RF Channel release ACK. Hence,
  lchan is in state LCHAN_ST_WAIT_TS_READY, and there's a conn with an
  assignment FSM pointing to it in conn->assignment.new_lchan.
  lchan->conn also points to the related conn.
* The BSSMAP SCCP link goes down (link lost), which will terminate the
  conn->fi of all conns related to the MSC peer going down.
  During that teardown, first gscon_pre_term()->gscon_release_lchans()->
  assignment_reset() is called, which sets
  conn->assignment.new_lchan=NULL and calls lchan_release(). This path
  leaves conn->assignment.new_lchan->conn untouched!
* Later in the call path, when finally the bsc_subscr is put() to 0
  references and associated lchan gets its lchan_forget_conn() called,
  it will access lchan->conn which was not freed in the previous step
  mentioned above during assignment_reset().

This patch fixes the issue by adding a lchan_forget_conn() after the
lchan_release() in assignment_reset(), to make sure the conn is no
longer user by the lchan afterwards.

Related: OS#6936
Change-Id: Ifbb9a61cd8a40d953ef5c2b52f9be9ef0dffefa4
(cherry picked from commit 44efd5b20b50ab894ed32ada3340fb5507b4852b)
Pau Espin Pedrol at

#20532 (Feb 19, 2026, 12:04:02 PM)

Bump version: 1.14.0.10-44efd → 1.14.1

Change-Id: I2a3907eabebc7f282f0a00d50b11894847669c1f
Pau Espin Pedrol at

#20531 (Feb 19, 2026, 12:04:01 PM)

ipaccess-config-e1-driver: Make sure struct input_signal_data is zero initialized

Change-Id: If97c4a4202eaf96446d48e821d5e59c98bafe51c
(cherry picked from commit 37929c0886be2fa71aadadc571ee024c3d54a3a6)
Pau Espin Pedrol at

#20530 (Feb 19, 2026, 12:04:01 PM)

assignment_fsm: Fix use-after-free of lchan->conn

Scenario:
* A DYNAMIC/OSMOCOM TS in PDCH mode is selected to be used for TCH/F,
  hence the TS is being switched to TCH/F: RF Channel Release is being
  transmitted and waiting to receive RF Channel release ACK. Hence,
  lchan is in state LCHAN_ST_WAIT_TS_READY, and there's a conn with an
  assignment FSM pointing to it in conn->assignment.new_lchan.
  lchan->conn also points to the related conn.
* The BSSMAP SCCP link goes down (link lost), which will terminate the
  conn->fi of all conns related to the MSC peer going down.
  During that teardown, first gscon_pre_term()->gscon_release_lchans()->
  assignment_reset() is called, which sets
  conn->assignment.new_lchan=NULL and calls lchan_release(). This path
  leaves conn->assignment.new_lchan->conn untouched!
* Later in the call path, when finally the bsc_subscr is put() to 0
  references and associated lchan gets its lchan_forget_conn() called,
  it will access lchan->conn which was not freed in the previous step
  mentioned above during assignment_reset().

This patch fixes the issue by adding a lchan_forget_conn() after the
lchan_release() in assignment_reset(), to make sure the conn is no
longer user by the lchan afterwards.

Related: OS#6936
Change-Id: Ifbb9a61cd8a40d953ef5c2b52f9be9ef0dffefa4
(cherry picked from commit 44efd5b20b50ab894ed32ada3340fb5507b4852b)
Pau Espin Pedrol at

#20529 (Feb 19, 2026, 11:41:47 AM)

Bump version: 1.12.0.73-10f3 → 1.13.0

Change-Id: I877d255890a525a34fbf89101b3ff0bbd0989c87
Pau Espin Pedrol at

#20528 (Feb 19, 2026, 11:41:43 AM)

Bump version: 1.12.0.73-10f3 → 1.13.0

Change-Id: I877d255890a525a34fbf89101b3ff0bbd0989c87
Pau Espin Pedrol at

#20527 (Feb 19, 2026, 11:41:43 AM)

Bump version: 1.12.0.73-10f3 → 1.13.0

Change-Id: I877d255890a525a34fbf89101b3ff0bbd0989c87
Pau Espin Pedrol at

#20526 (Feb 19, 2026, 9:34:56 AM)

Tear down context_maps when UPF assoc goes down

Related: SYS#7294
Change-Id: I7dcd9114861fa8f4bf855a02c286f85083ad75fe
Pau Espin Pedrol at

#20525 (Feb 19, 2026, 9:34:54 AM)

Tear down context_maps when UPF assoc goes down

Related: SYS#7294
Change-Id: I7dcd9114861fa8f4bf855a02c286f85083ad75fe
Pau Espin Pedrol at

#20524 (Feb 18, 2026, 4:30:32 PM)

twjit: add underrun extension feature

Themyscira Wireless RTP jitter buffer implementation (twjit) was
originally designed for continuous streaming, as opposed to RTP
streams with intentional gaps.  However, intentional gaps in the
case of DTX pauses or radio errors are called for by 3GPP AoIP
specs and are the default mode for UL RTP Tx in OsmoBTS - therefore,
this philosophical incompatibility between twjit and RTP intentional
gaps is likely to be an obstacle to the desired replacement of
Belledonne ortp with twrtp+twjit in OsmoBTS.  The greatest practical
effect of this philosophical mismatch occurs with RTP streams that
apply intentional gaps for DTX: with standard twjit algorithm,
isolated-island comfort noise update packets throughout each DTX
pause will be dropped.

Underrun extension is an optionally-enabled modification to twjit
algorithm that solves the problem of isolated-island CN update
packets during DTX pauses - i.e., delivers these packets to the
application on the output side of twjit.  As detailed in the
included document update, this solution is not perfect in that
these isolated CN update packets will be delivered only in steady
flow state but not in new flow acquisition states - but it is the
best solution this author can currently provide for the problem of
RTP intentional gaps.

Related: OS#6474
Change-Id: Ibda74c0dbfb163f5d0e3fb13f593a6e2c6817673
falcon at

#20523 (Feb 18, 2026, 4:30:29 PM)

twjit: add underrun extension feature

Themyscira Wireless RTP jitter buffer implementation (twjit) was
originally designed for continuous streaming, as opposed to RTP
streams with intentional gaps.  However, intentional gaps in the
case of DTX pauses or radio errors are called for by 3GPP AoIP
specs and are the default mode for UL RTP Tx in OsmoBTS - therefore,
this philosophical incompatibility between twjit and RTP intentional
gaps is likely to be an obstacle to the desired replacement of
Belledonne ortp with twrtp+twjit in OsmoBTS.  The greatest practical
effect of this philosophical mismatch occurs with RTP streams that
apply intentional gaps for DTX: with standard twjit algorithm,
isolated-island comfort noise update packets throughout each DTX
pause will be dropped.

Underrun extension is an optionally-enabled modification to twjit
algorithm that solves the problem of isolated-island CN update
packets during DTX pauses - i.e., delivers these packets to the
application on the output side of twjit.  As detailed in the
included document update, this solution is not perfect in that
these isolated CN update packets will be delivered only in steady
flow state but not in new flow acquisition states - but it is the
best solution this author can currently provide for the problem of
RTP intentional gaps.

Related: OS#6474
Change-Id: Ibda74c0dbfb163f5d0e3fb13f593a6e2c6817673
falcon at

#20522 (Feb 18, 2026, 4:30:26 PM)

twjit: add underrun extension feature

Themyscira Wireless RTP jitter buffer implementation (twjit) was
originally designed for continuous streaming, as opposed to RTP
streams with intentional gaps.  However, intentional gaps in the
case of DTX pauses or radio errors are called for by 3GPP AoIP
specs and are the default mode for UL RTP Tx in OsmoBTS - therefore,
this philosophical incompatibility between twjit and RTP intentional
gaps is likely to be an obstacle to the desired replacement of
Belledonne ortp with twrtp+twjit in OsmoBTS.  The greatest practical
effect of this philosophical mismatch occurs with RTP streams that
apply intentional gaps for DTX: with standard twjit algorithm,
isolated-island comfort noise update packets throughout each DTX
pause will be dropped.

Underrun extension is an optionally-enabled modification to twjit
algorithm that solves the problem of isolated-island CN update
packets during DTX pauses - i.e., delivers these packets to the
application on the output side of twjit.  As detailed in the
included document update, this solution is not perfect in that
these isolated CN update packets will be delivered only in steady
flow state but not in new flow acquisition states - but it is the
best solution this author can currently provide for the problem of
RTP intentional gaps.

Related: OS#6474
Change-Id: Ibda74c0dbfb163f5d0e3fb13f593a6e2c6817673
falcon at

#20521 (Feb 18, 2026, 12:57:21 PM)

Tear down context_maps when UPF assoc goes down

Related: SYS#7294
Change-Id: I7dcd9114861fa8f4bf855a02c286f85083ad75fe
Pau Espin Pedrol at

#20520 (Feb 18, 2026, 12:57:21 PM)

Integrate mgw/mgcp failures more tightly into context_map fsm

Similar to what we already do in RAN/CN link lost.
As a result, we now trigger RLSD instead of Iu RANAP Release Req, which
adequates better to the level where hnbgw is espected to operate.

Change-Id: Ief051e1384d2282708302dc1756454d8f88a6fae
Pau Espin Pedrol at

#20519 (Feb 18, 2026, 12:57:18 PM)

Tear down context_maps when UPF assoc goes down

Related: SYS#7294
Change-Id: I7dcd9114861fa8f4bf855a02c286f85083ad75fe
Pau Espin Pedrol at

#20518 (Feb 18, 2026, 12:57:18 PM)

Integrate mgw/mgcp failures more tightly into context_map fsm

Similar to what we already do in RAN/CN link lost.
As a result, we now trigger RLSD instead of Iu RANAP Release Req, which
adequates better to the level where hnbgw is espected to operate.

Change-Id: Ief051e1384d2282708302dc1756454d8f88a6fae
Pau Espin Pedrol at

#20517 (Feb 17, 2026, 6:20:30 PM)

twjit: add underrun extension feature

Themyscira Wireless RTP jitter buffer implementation (twjit) was
originally designed for continuous streaming, as opposed to RTP
streams with intentional gaps.  However, intentional gaps in the
case of DTX pauses or radio errors are called for by 3GPP AoIP
specs and are the default mode for UL RTP Tx in OsmoBTS - therefore,
this philosophical incompatibility between twjit and RTP intentional
gaps is likely to be an obstacle to the desired replacement of
Belledonne ortp with twrtp+twjit in OsmoBTS.  The greatest practical
effect of this philosophical mismatch occurs with RTP streams that
apply intentional gaps for DTX: with standard twjit algorithm,
isolated-island comfort noise update packets throughout each DTX
pause will be dropped.

Underrun extension is an optionally-enabled modification to twjit
algorithm that solves the problem of isolated-island CN update
packets during DTX pauses - i.e., delivers these packets to the
application on the output side of twjit.  As detailed in the
included document update, this solution is not perfect in that
these isolated CN update packets will be delivered only in steady
flow state but not in new flow acquisition states - but it is the
best solution this author can currently provide for the problem of
RTP intentional gaps.

Related: OS#6474
Change-Id: Ibda74c0dbfb163f5d0e3fb13f593a6e2c6817673
falcon at

#20516 (Feb 17, 2026, 6:20:30 PM)

twjit: add underrun extension feature

Themyscira Wireless RTP jitter buffer implementation (twjit) was
originally designed for continuous streaming, as opposed to RTP
streams with intentional gaps.  However, intentional gaps in the
case of DTX pauses or radio errors are called for by 3GPP AoIP
specs and are the default mode for UL RTP Tx in OsmoBTS - therefore,
this philosophical incompatibility between twjit and RTP intentional
gaps is likely to be an obstacle to the desired replacement of
Belledonne ortp with twrtp+twjit in OsmoBTS.  The greatest practical
effect of this philosophical mismatch occurs with RTP streams that
apply intentional gaps for DTX: with standard twjit algorithm,
isolated-island comfort noise update packets throughout each DTX
pause will be dropped.

Underrun extension is an optionally-enabled modification to twjit
algorithm that solves the problem of isolated-island CN update
packets during DTX pauses - i.e., delivers these packets to the
application on the output side of twjit.  As detailed in the
included document update, this solution is not perfect in that
these isolated CN update packets will be delivered only in steady
flow state but not in new flow acquisition states - but it is the
best solution this author can currently provide for the problem of
RTP intentional gaps.

Related: OS#6474
Change-Id: Ibda74c0dbfb163f5d0e3fb13f593a6e2c6817673
falcon at

#20515 (Feb 17, 2026, 6:20:29 PM)

twjit: add underrun extension feature

Themyscira Wireless RTP jitter buffer implementation (twjit) was
originally designed for continuous streaming, as opposed to RTP
streams with intentional gaps.  However, intentional gaps in the
case of DTX pauses or radio errors are called for by 3GPP AoIP
specs and are the default mode for UL RTP Tx in OsmoBTS - therefore,
this philosophical incompatibility between twjit and RTP intentional
gaps is likely to be an obstacle to the desired replacement of
Belledonne ortp with twrtp+twjit in OsmoBTS.  The greatest practical
effect of this philosophical mismatch occurs with RTP streams that
apply intentional gaps for DTX: with standard twjit algorithm,
isolated-island comfort noise update packets throughout each DTX
pause will be dropped.

Underrun extension is an optionally-enabled modification to twjit
algorithm that solves the problem of isolated-island CN update
packets during DTX pauses - i.e., delivers these packets to the
application on the output side of twjit.  As detailed in the
included document update, this solution is not perfect in that
these isolated CN update packets will be delivered only in steady
flow state but not in new flow acquisition states - but it is the
best solution this author can currently provide for the problem of
RTP intentional gaps.

Related: OS#6474
Change-Id: Ibda74c0dbfb163f5d0e3fb13f593a6e2c6817673
falcon at

#20514 (Feb 17, 2026, 8:08:49 AM)

libgsmhr/fetch_sources: fix download from 3gpp.org

Fix that the script gets a 403 forbidden error since 2026-01-26. Set a
user-agent string and switch the protocol to https while at it.

Change-Id: I5679bc519e7891e3342d8e78c11bf5eb6b44a217
Oliver Smith at

#20513 (Feb 17, 2026, 8:08:48 AM)

libgsmhr/fetch_sources: fix download from 3gpp.org

Fix that the script gets a 403 forbidden error since 2026-01-26. Set a
user-agent string and switch the protocol to https while at it.

Change-Id: I5679bc519e7891e3342d8e78c11bf5eb6b44a217
Oliver Smith at

#20512 (Feb 17, 2026, 7:57:30 AM)

libgsmhr/fetch_sources: set protocol to https

The http version gives a 403 forbidden error since 2026-01-26.

Change-Id: I5679bc519e7891e3342d8e78c11bf5eb6b44a217
Oliver Smith at

#20511 (Feb 17, 2026, 7:57:28 AM)

libgsmhr/fetch_sources: set protocol to https

The http version gives a 403 forbidden error since 2026-01-26.

Change-Id: I5679bc519e7891e3342d8e78c11bf5eb6b44a217
Oliver Smith at

#20510 (Feb 17, 2026, 12:49:01 AM)

rspro_server: fix releasing timed out clients

Fix crash on reconnects of clients if they timed out.

The duplicate check will use conn->peer of the old peer,
but conn->peer is NULL because rspro_client_conn_destroy() never destroys
the connection if conn->peer is valid when rspro_client_conn_destroy() is called.

void rspro_client_conn_destroy(conn)
{
if (conn->peer) {
peer = conn->peer;
conn->peer = NULL;
osmo_stream_srv_destroy(peer); /* calls sock_closed_cb()
}
[..]
}

int sock_closed_cb(peer)
{
[..]
if (conn->peer) {
osmo_fsm_inst_dispatch(conn->fi, CLNTC_E_TCP_DOWN, NULL); /* calls in the end rspro_client_conn_destroy() */
}
return 0;
}

Fixes: 8cfe1d808a57 ("Use new osmo_ipa_ka_fsm_inst APIs from libosmo-netif")
Related: OS#6957
Change-Id: I1f7faf5ffdd909362c492ab434b63fa7e79ada95
lynxis at

#20509 (Feb 17, 2026, 12:48:53 AM)

rspro_server: fix releasing timed out clients

Fix crash on reconnects of clients if they timed out.

The duplicate check will use conn->peer of the old peer,
but conn->peer is NULL because rspro_client_conn_destroy() never destroys
the connection if conn->peer is valid when rspro_client_conn_destroy() is called.

void rspro_client_conn_destroy(conn)
{
if (conn->peer) {
peer = conn->peer;
conn->peer = NULL;
osmo_stream_srv_destroy(peer); /* calls sock_closed_cb()
}
[..]
}

int sock_closed_cb(peer)
{
[..]
if (conn->peer) {
osmo_fsm_inst_dispatch(conn->fi, CLNTC_E_TCP_DOWN, NULL); /* calls in the end rspro_client_conn_destroy() */
}
return 0;
}

Fixes: 8cfe1d808a57 ("Use new osmo_ipa_ka_fsm_inst APIs from libosmo-netif")
Related: OS#6957
Change-Id: I1f7faf5ffdd909362c492ab434b63fa7e79ada95
lynxis at

#20508 (Feb 16, 2026, 4:20:47 PM)

pfcp: Trigger assoc_cb(false) upon Recovery Timestamp change

Signal cp_peer becomes disassociated to the user when the recovery
timestamp value changes.
The library will automatically try to re-associate after signalling the
association change.

Related: SYS#7294
Change-Id: I5400ae9c2f00b3c87a73aef5cebba67cf9434477
Pau Espin Pedrol at

#20507 (Feb 16, 2026, 4:20:45 PM)

pfcp: Trigger assoc_cb(false) upon Recovery Timestamp change

Signal cp_peer becomes disassociated to the user when the recovery
timestamp value changes.
The library will automatically try to re-associate after signalling the
association change.

Related: SYS#7294
Change-Id: I5400ae9c2f00b3c87a73aef5cebba67cf9434477
Pau Espin Pedrol at

#20506 (Feb 16, 2026, 3:15:30 PM)

Tear down context_maps when UPF assoc goes down

Related: SYS#7294
Change-Id: I7dcd9114861fa8f4bf855a02c286f85083ad75fe
Pau Espin Pedrol at

#20505 (Feb 16, 2026, 3:15:30 PM)

Integrate mgw/mgcp failures more tightly into context_map fsm

Similar to what we already do in RAN/CN link lost.
As a result, we now trigger RLSD instead of Iu RANAP Release Req, which
adequates better to the level where hnbgw is espected to operate.

Change-Id: Ief051e1384d2282708302dc1756454d8f88a6fae
Pau Espin Pedrol at

#20504 (Feb 16, 2026, 3:15:25 PM)

Tear down context_maps when UPF assoc goes down

Related: SYS#7294
Change-Id: I7dcd9114861fa8f4bf855a02c286f85083ad75fe
Pau Espin Pedrol at

#20503 (Feb 16, 2026, 3:15:25 PM)

Integrate mgw/mgcp failures more tightly into context_map fsm

Similar to what we already do in RAN/CN link lost.
As a result, we now trigger RLSD instead of Iu RANAP Release Req, which
adequates better to the level where hnbgw is espected to operate.

Change-Id: Ief051e1384d2282708302dc1756454d8f88a6fae
Pau Espin Pedrol at

#20502 (Feb 16, 2026, 11:18:57 AM)

cp_peer: Implement local originated heartbeat procedure

Submit PFCP Hearbeat Request with configured interval,
and timeout after no PFCP Hearbeat Response received based on
configuration.

Upon timeout, the cp_peer assoc_cb() is called to notify the user that
the peer is considered not associated anymore. It will then try to
keep associating again automatically.

Default value for OSMO_PFCP_TIMER_HEARTBEAT_RESP is increased to 35s to
allow for a single Heartbeat Request packet loss.

Related: SYS#7294
Change-Id: I7efc0961e1ea39dd7f4cc6ba96be4cf5ce9a2d6c
Pau Espin Pedrol at

#20501 (Feb 16, 2026, 11:18:57 AM)

Move struct osmo_pfcp_endpoint to pfcp_endpoint_private.h

Similar to what we have with pfcp_cp_peer_private.h.

Change-Id: Id3dcd1c2e086d40bbc7060d5e89aed5ee18249e1
Pau Espin Pedrol at

#20500 (Feb 16, 2026, 11:18:57 AM)

cp_peer: Implement local originated heartbeat procedure

Submit PFCP Hearbeat Request with configured interval,
and timeout after no PFCP Hearbeat Response received based on
configuration.

Upon timeout, the cp_peer assoc_cb() is called to notify the user that
the peer is considered not associated anymore. It will then try to
keep associating again automatically.

Default value for OSMO_PFCP_TIMER_HEARTBEAT_RESP is increased to 35s to
allow for a single Heartbeat Request packet loss.

Related: SYS#7294
Change-Id: I7efc0961e1ea39dd7f4cc6ba96be4cf5ce9a2d6c
Pau Espin Pedrol at

#20499 (Feb 16, 2026, 11:18:57 AM)

Move struct osmo_pfcp_endpoint to pfcp_endpoint_private.h

Similar to what we have with pfcp_cp_peer_private.h.

Change-Id: Id3dcd1c2e086d40bbc7060d5e89aed5ee18249e1
Pau Espin Pedrol at

#20498 (Feb 16, 2026, 10:53:57 AM)

xua_asp_fsm: Validate remote ASP Id matching config in SG role

The node in SG role really doesn't have an ASP Id of its own (it is
never sent over the wire). Hence, use the "asp-identifier <N>" VTY
config in SG role to require the ASP to identify itself with a given
ASP identifier.

Related: OS#6953
Change-Id: I3e22439aa7e22f7a6113b093c44ace6745c808b9
Pau Espin Pedrol at

#20497 (Feb 16, 2026, 10:53:56 AM)

xua_asp_fsm: Validate remote ASP Id matching config in SG role

The node in SG role really doesn't have an ASP Id of its own (it is
never sent over the wire). Hence, use the "asp-identifier <N>" VTY
config in SG role to require the ASP to identify itself with a given
ASP identifier.

Related: OS#6953
Change-Id: I3e22439aa7e22f7a6113b093c44ace6745c808b9
Pau Espin Pedrol at

#20496 (Feb 16, 2026, 10:38:39 AM)

xua_asp_fsm: Validate remote ASP Id matching config in SG role

The node in SG role really doesn't have an ASP Id of its own (it is
never sent over the wire). Hence, use the "asp-identifier <N>" VTY
config in SG role to require the ASP to identify itself with a given
ASP identifier.

Related: OS#6953
Change-Id: I3e22439aa7e22f7a6113b093c44ace6745c808b9
Pau Espin Pedrol at

#20495 (Feb 16, 2026, 10:38:38 AM)

Introduce struct osmo_ss7_as_asp_assoc

This new struct allows supporting unlimited number of ASPs per AS.
It can also potentially be used in the future to:
* Hold M3UA "ASP Identifier" per AS<->ASP association
* Speed up iterating over AS served by a given ASP.

NOTE: Having >16 ASPs per AS may not be desirable, for instance under
loadshare traffic mode ITU SLS is 4 bit, so despite having ext_sls
extending the table to 128 entries based on OPC, it may not provide
enough entropy to properly loadshare among all of them.

Related: OS#7519
Change-Id: I149ab467899633ac50cba3e482b2cae02124279d
Pau Espin Pedrol at

#20494 (Feb 16, 2026, 10:38:36 AM)

Allow configuring local ASP Identifier

If configured, it will be transmitted during ASP UP and ASP UP ACK.
This may be needed if facing an SG/IPSP peer who requires ASP Identifier
to be set.

Related: OS#6953
Change-Id: Ib94d542f940e13d5c007bc3319e7dde65cf81f12
Pau Espin Pedrol at

#20493 (Feb 16, 2026, 10:38:34 AM)

asp: Introduce asp->assoc_as_list

This way we can iterate easily/quickly the AS served by a given ASP.
This in turn allows simplifying some code since we cache the amount of
AS served by the ASP at any time, so we save some counting.

Related: SYS#6953
Change-Id: I1ca90748286374109dbb4277cbc7b2337ce2072a
Pau Espin Pedrol at

#20492 (Feb 16, 2026, 10:37:45 AM)

xua_asp_fsm: Error on ASP UP (ACK) with non-unique ASP Identifier

Following RFC4666:
"""
   The "Invalid ASP Identifier" error is sent by an SGP in response to
   an ASP Up message with an invalid (i.e., non-unique) ASP Identifier
"""

Change-Id: I2d422acaa2f04c7d1eebd92c3185c4f5476a1789
Pau Espin Pedrol at

#20491 (Feb 16, 2026, 10:37:45 AM)

cosmetic: xua_as_fsm: Fix mixed brace/no-brace blocks in if/else

Change-Id: Ibfd818d354c09409b04b392853f544a220de3a72
Pau Espin Pedrol at

#20490 (Feb 16, 2026, 10:37:44 AM)

ss7_as: Optimize ASP Tx selection in Override traffic mode

Cache the last selected ASP, and expect it to still be the active ASP
most of the time until it changes.

Change-Id: I3d480d23591f4bd216293be60b22389b182fd8f3
Pau Espin Pedrol at

#20489 (Feb 16, 2026, 10:37:40 AM)

tests/vty: Introduce testASPservesTonsOfAS

Change-Id: I39016a479fde7d61b7c0f39ca769cd8c958b55b6
Pau Espin Pedrol at

#20488 (Feb 16, 2026, 10:37:39 AM)

tests/vty: Introduce testTonsOfASP

Add test to validate tons of ASPs (1000) can be configured, all serving
one given AS.

Related: SYS#7519
Change-Id: I9bfcfcbea3c4cec0e6284ae59d30670fcf3ccac4
Pau Espin Pedrol at

#20487 (Feb 16, 2026, 10:37:39 AM)

xua_default_lm_fsm: Submit RKM REG REQ for all AS in ASP

So far only the first rctx (AS) was being registered.
This fixes RKM for ASPs serving multiple AS in ASP/IPSP role.

Relted: OS#6943
Change-Id: I932c1b05dfd37fd7b89adea0d1ea59a5dc6138b4
Pau Espin Pedrol at

#20486 (Feb 16, 2026, 10:37:39 AM)

xua_asp_fsm: Remove obvious comments

Those can already be interpretred directly by the ENSURE_* macros.
No need to clog the file with more lines describing stuff.

Change-Id: Idec06646c48fbce4cbe200e88f987dfb3e9d5a39
Pau Espin Pedrol at

#20485 (Feb 16, 2026, 10:37:38 AM)

ss7_as: Optimize ss7_as_asp_assoc_find()

Look for counterpart on the object with the shortest list, ie. convert
from O(N) to O(min(N,M)).
This way eg. if we have 100 ASPs on 1 AS, lookup time becomes O(1).
Same if we have eg. 1 ASP serving 100 AS.

Change-Id: I139aede15af6b6a77d19e6fcf6b6abe8ed6599a6
Pau Espin Pedrol at

#20484 (Feb 16, 2026, 10:37:37 AM)

xua_as_fsm: Remove TODO no longer valid

Routing Context is filled in in fill_notify_route_ctx().

Take the chance to move the logging a bit up in the function, to have
all npar filling together.

Change-Id: I57af18dacc0470d36ddd4705a9530bd44b31f9c0
Pau Espin Pedrol at

#20483 (Feb 16, 2026, 10:37:36 AM)

xua_asp_fsm: Validate remote ASP Id matching config in SG role

The node in SG role really doesn't have an ASP Id of its own (it is
never sent over the wire). Hence, use the "asp-identifier <N>" VTY
config in SG role to require the ASP to identify itself with a given
ASP identifier.

Related: OS#6953
Change-Id: I3e22439aa7e22f7a6113b093c44ace6745c808b9
Pau Espin Pedrol at

#20482 (Feb 16, 2026, 10:37:34 AM)

xua_default_lm_fsm: Submit RKM REG REQ for all AS in ASP

So far only the first rctx (AS) was being registered.
This fixes RKM for ASPs serving multiple AS in ASP/IPSP role.

Relted: OS#6943
Change-Id: I932c1b05dfd37fd7b89adea0d1ea59a5dc6138b4
Pau Espin Pedrol at

#20481 (Feb 16, 2026, 10:36:34 AM)

ss7_as: Optimize ASP Tx selection in Override traffic mode

Cache the last selected ASP, and expect it to still be the active ASP
most of the time until it changes.

Change-Id: I3d480d23591f4bd216293be60b22389b182fd8f3
Pau Espin Pedrol at

#20480 (Feb 16, 2026, 10:36:34 AM)

asp: Introduce asp->assoc_as_list

This way we can iterate easily/quickly the AS served by a given ASP.
This in turn allows simplifying some code since we cache the amount of
AS served by the ASP at any time, so we save some counting.

Related: SYS#6953
Change-Id: I1ca90748286374109dbb4277cbc7b2337ce2072a
Pau Espin Pedrol at

#20479 (Feb 16, 2026, 10:36:33 AM)

tests/vty: Introduce testTonsOfASP

Add test to validate tons of ASPs (1000) can be configured, all serving
one given AS.

Related: SYS#7519
Change-Id: I9bfcfcbea3c4cec0e6284ae59d30670fcf3ccac4
Pau Espin Pedrol at

#20478 (Feb 16, 2026, 10:36:33 AM)

cosmetic: xua_as_fsm: Fix mixed brace/no-brace blocks in if/else

Change-Id: Ibfd818d354c09409b04b392853f544a220de3a72
Pau Espin Pedrol at

#20477 (Feb 16, 2026, 10:36:32 AM)

xua_asp_fsm: Error on ASP UP (ACK) with non-unique ASP Identifier

Following RFC4666:
"""
   The "Invalid ASP Identifier" error is sent by an SGP in response to
   an ASP Up message with an invalid (i.e., non-unique) ASP Identifier
"""

Change-Id: I2d422acaa2f04c7d1eebd92c3185c4f5476a1789
Pau Espin Pedrol at

#20476 (Feb 16, 2026, 10:36:32 AM)

Introduce struct osmo_ss7_as_asp_assoc

This new struct allows supporting unlimited number of ASPs per AS.
It can also potentially be used in the future to:
* Hold M3UA "ASP Identifier" per AS<->ASP association
* Speed up iterating over AS served by a given ASP.

NOTE: Having >16 ASPs per AS may not be desirable, for instance under
loadshare traffic mode ITU SLS is 4 bit, so despite having ext_sls
extending the table to 128 entries based on OPC, it may not provide
enough entropy to properly loadshare among all of them.

Related: OS#7519
Change-Id: I149ab467899633ac50cba3e482b2cae02124279d
Pau Espin Pedrol at

#20475 (Feb 16, 2026, 10:36:32 AM)

Allow configuring local ASP Identifier

If configured, it will be transmitted during ASP UP and ASP UP ACK.
This may be needed if facing an SG/IPSP peer who requires ASP Identifier
to be set.

Related: OS#6953
Change-Id: Ib94d542f940e13d5c007bc3319e7dde65cf81f12
Pau Espin Pedrol at

#20474 (Feb 16, 2026, 10:36:31 AM)

tests/vty: Introduce testASPservesTonsOfAS

Change-Id: I39016a479fde7d61b7c0f39ca769cd8c958b55b6
Pau Espin Pedrol at

#20473 (Feb 16, 2026, 10:36:31 AM)

xua_as_fsm: Remove TODO no longer valid

Routing Context is filled in in fill_notify_route_ctx().

Take the chance to move the logging a bit up in the function, to have
all npar filling together.

Change-Id: I57af18dacc0470d36ddd4705a9530bd44b31f9c0
Pau Espin Pedrol at

#20472 (Feb 16, 2026, 10:36:31 AM)

ss7_as: Optimize ss7_as_asp_assoc_find()

Look for counterpart on the object with the shortest list, ie. convert
from O(N) to O(min(N,M)).
This way eg. if we have 100 ASPs on 1 AS, lookup time becomes O(1).
Same if we have eg. 1 ASP serving 100 AS.

Change-Id: I139aede15af6b6a77d19e6fcf6b6abe8ed6599a6
Pau Espin Pedrol at

#20471 (Feb 16, 2026, 10:36:31 AM)

xua_asp_fsm: Remove obvious comments

Those can already be interpretred directly by the ENSURE_* macros.
No need to clog the file with more lines describing stuff.

Change-Id: Idec06646c48fbce4cbe200e88f987dfb3e9d5a39
Pau Espin Pedrol at

#20470 (Feb 16, 2026, 10:35:15 AM)

m3ua: Fix missing break in m3a_rx_snm for IPSP

Fixes: e597f08dde51361434a027dc4362a5698220afb6
Change-Id: I387794b0a736ee8419e7d12dc0f586aa30b9ac26
Pau Espin Pedrol at

#20469 (Feb 16, 2026, 10:35:15 AM)

m3ua: Fix missing break in m3a_rx_snm for IPSP

Fixes: e597f08dde51361434a027dc4362a5698220afb6
Change-Id: I387794b0a736ee8419e7d12dc0f586aa30b9ac26
Pau Espin Pedrol at

#20468 (Feb 16, 2026, 5:09:57 AM)

Fixed PDP QoS return length and terminal reconnection issues.

Some older modules, such as the Air20X module, may crash during PDP attachment due to excessively long QoS response packets.
If the PDP is not released after successful attachment, the module will restart, and subsequent TCP connections will fail.

Related: OS#6922
Change-Id: I11c24b64f0e49cf80c825969dbf018b2948d855c
canghaiwuhen at

#20467 (Feb 16, 2026, 5:09:53 AM)

Fixed PDP QoS return length and terminal reconnection issues.

Some older modules, such as the Air20X module, may crash during PDP attachment due to excessively long QoS response packets.
If the PDP is not released after successful attachment, the module will restart, and subsequent TCP connections will fail.

Related: OS#6922
Change-Id: I11c24b64f0e49cf80c825969dbf018b2948d855c
canghaiwuhen at

#20466 (Feb 16, 2026, 5:09:28 AM)

Fixed PDP QoS return length and terminal reconnection issues.

Some older modules, such as the Air20X module, may crash during PDP attachment due to excessively long QoS response packets.
If the PDP is not released after successful attachment, the module will restart, and subsequent TCP connections will fail.

Related: OS#6922
Change-Id: I11c24b64f0e49cf80c825969dbf018b2948d855c
canghaiwuhen at

#20465 (Feb 16, 2026, 5:09:27 AM)

Fixed PDP QoS return length and terminal reconnection issues.

Some older modules, such as the Air20X module, may crash during PDP attachment due to excessively long QoS response packets.
If the PDP is not released after successful attachment, the module will restart, and subsequent TCP connections will fail.

Related: OS#6922
Change-Id: I11c24b64f0e49cf80c825969dbf018b2948d855c
canghaiwuhen at

#20464 (Feb 16, 2026, 5:07:09 AM)

Fixed PDP QoS return length and terminal reconnection issues.

Some older modules, such as the Air20X module, may crash during PDP attachment due to excessively long QoS response packets.
If the PDP is not released after successful attachment, the module will restart, and subsequent TCP connections will fail.

Related: OS#6922
Change-Id: I11c24b64f0e49cf80c825969dbf018b2948d855c
canghaiwuhen at

#20463 (Feb 16, 2026, 5:07:07 AM)

Fixed PDP QoS return length and terminal reconnection issues.

Some older modules, such as the Air20X module, may crash during PDP attachment due to excessively long QoS response packets.
If the PDP is not released after successful attachment, the module will restart, and subsequent TCP connections will fail.

Related: OS#6922
Change-Id: I11c24b64f0e49cf80c825969dbf018b2948d855c
canghaiwuhen at

#20462 (Feb 16, 2026, 5:06:44 AM)

Fixed PDP QoS return length and terminal reconnection issues.

Some older modules, such as the Air20X module, may crash during PDP attachment due to excessively long QoS response packets.
If the PDP is not released after successful attachment, the module will restart, and subsequent TCP connections will fail.

Related: OS#6922
Change-Id: I11c24b64f0e49cf80c825969dbf018b2948d855c
canghaiwuhen at

#20461 (Feb 16, 2026, 5:06:42 AM)

Fixed PDP QoS return length and terminal reconnection issues.

Some older modules, such as the Air20X module, may crash during PDP attachment due to excessively long QoS response packets.
If the PDP is not released after successful attachment, the module will restart, and subsequent TCP connections will fail.

Related: OS#6922
Change-Id: I11c24b64f0e49cf80c825969dbf018b2948d855c
canghaiwuhen at

#20460 (Feb 13, 2026, 12:59:52 PM)

cp_peer: Implement local originated heartbeat procedure

Submit PFCP Hearbeat Request with configured interval,
and timeout after no PFCP Hearbeat Response received based on
configuration.

Upon timeout, the cp_peer assoc_cb() is called to notify the user that
the peer is considered not associated anymore. It will then try to
keep associating again automatically.

Related: SYS#7294
Change-Id: I7efc0961e1ea39dd7f4cc6ba96be4cf5ce9a2d6c
Pau Espin Pedrol at

#20459 (Feb 13, 2026, 12:59:50 PM)

cp_peer: Implement local originated heartbeat procedure

Submit PFCP Hearbeat Request with configured interval,
and timeout after no PFCP Hearbeat Response received based on
configuration.

Upon timeout, the cp_peer assoc_cb() is called to notify the user that
the peer is considered not associated anymore. It will then try to
keep associating again automatically.

Related: SYS#7294
Change-Id: I7efc0961e1ea39dd7f4cc6ba96be4cf5ce9a2d6c
Pau Espin Pedrol at

#20458 (Feb 13, 2026, 8:52:46 AM)

xua_asp_fsm: Error on ASP UP (ACK) with non-unique ASP Identifier

Following RFC4666:
"""
   The "Invalid ASP Identifier" error is sent by an SGP in response to
   an ASP Up message with an invalid (i.e., non-unique) ASP Identifier
"""

Change-Id: I2d422acaa2f04c7d1eebd92c3185c4f5476a1789
Pau Espin Pedrol at

#20457 (Feb 13, 2026, 8:52:45 AM)

xua_asp_fsm: Remove obvious comments

Those can already be interpretred directly by the ENSURE_* macros.
No need to clog the file with more lines describing stuff.

Change-Id: Idec06646c48fbce4cbe200e88f987dfb3e9d5a39
Pau Espin Pedrol at

#20456 (Feb 13, 2026, 8:52:44 AM)

cosmetic: xua_as_fsm: Fix mixed brace/no-brace blocks in if/else

Change-Id: Ibfd818d354c09409b04b392853f544a220de3a72
Pau Espin Pedrol at

#20455 (Feb 13, 2026, 8:51:54 AM)

Allow configuring local ASP Identifier

If configured, it will be transmitted during ASP UP and ASP UP ACK.
This may be needed if facing an SG/IPSP peer who requires ASP Identifier
to be set.

Related: OS#6953
Change-Id: Ib94d542f940e13d5c007bc3319e7dde65cf81f12
Pau Espin Pedrol at

#20454 (Feb 13, 2026, 8:51:54 AM)

xua_asp_fsm: Validate remote ASP Id matching config in SG role

The node in SG role really doesn't have an ASP Id of its own (it is
never sent over the wire). Hence, use the "asp-identifier <N>" VTY
config in SG role to require the ASP to identify itself with a given
ASP identifier.

Related: OS#6953
Change-Id: I3e22439aa7e22f7a6113b093c44ace6745c808b9
Pau Espin Pedrol at

#20453 (Feb 13, 2026, 8:51:50 AM)

xua_asp_fsm: Remove obvious comments

Those can already be interpretred directly by the ENSURE_* macros.
No need to clog the file with more lines describing stuff.

Change-Id: Idec06646c48fbce4cbe200e88f987dfb3e9d5a39
Pau Espin Pedrol at

#20452 (Feb 13, 2026, 8:51:50 AM)

xua_asp_fsm: Error on ASP UP (ACK) with non-unique ASP Identifier

Following RFC4666:
"""
   The "Invalid ASP Identifier" error is sent by an SGP in response to
   an ASP Up message with an invalid (i.e., non-unique) ASP Identifier
"""

Change-Id: I2d422acaa2f04c7d1eebd92c3185c4f5476a1789
Pau Espin Pedrol at

#20451 (Feb 13, 2026, 8:51:49 AM)

cosmetic: xua_as_fsm: Fix mixed brace/no-brace blocks in if/else

Change-Id: Ibfd818d354c09409b04b392853f544a220de3a72
Pau Espin Pedrol at

#20450 (Feb 13, 2026, 8:51:49 AM)

Allow configuring local ASP Identifier

If configured, it will be transmitted during ASP UP and ASP UP ACK.
This may be needed if facing an SG/IPSP peer who requires ASP Identifier
to be set.

Related: OS#6953
Change-Id: Ib94d542f940e13d5c007bc3319e7dde65cf81f12
Pau Espin Pedrol at

#20449 (Feb 13, 2026, 8:51:48 AM)

xua_asp_fsm: Validate remote ASP Id matching config in SG role

The node in SG role really doesn't have an ASP Id of its own (it is
never sent over the wire). Hence, use the "asp-identifier <N>" VTY
config in SG role to require the ASP to identify itself with a given
ASP identifier.

Related: OS#6953
Change-Id: I3e22439aa7e22f7a6113b093c44ace6745c808b9
Pau Espin Pedrol at

#20448 (Feb 12, 2026, 4:05:45 PM)

xua_asp_fsm: Validate remote ASP Id matching config in SG role

The node in SG role really doesn't have an ASP Id of its own (it is
never sent over the wire). Hence, use the "asp-identifier <N>" VTY
config in SG role to require the ASP to identift itself with a given
ASP identifier.

Related: OS#6953
Change-Id: I3e22439aa7e22f7a6113b093c44ace6745c808b9
Pau Espin Pedrol at

#20447 (Feb 12, 2026, 4:05:45 PM)

xua_asp_fsm: Validate remote ASP Id matching config in SG role

The node in SG role really doesn't have an ASP Id of its own (it is
never sent over the wire). Hence, use the "asp-identifier <N>" VTY
config in SG role to require the ASP to identift itself with a given
ASP identifier.

Related: OS#6953
Change-Id: I3e22439aa7e22f7a6113b093c44ace6745c808b9
Pau Espin Pedrol at

#20446 (Feb 12, 2026, 3:23:57 PM)

cosmetic: xua_as_fsm: Fix mixed brace/no-brace blocks in if/else

Change-Id: Ibfd818d354c09409b04b392853f544a220de3a72
Pau Espin Pedrol at

#20445 (Feb 12, 2026, 3:23:57 PM)

cosmetic: xua_as_fsm: Fix mixed brace/no-brace blocks in if/else

Change-Id: Ibfd818d354c09409b04b392853f544a220de3a72
Pau Espin Pedrol at

#20444 (Feb 12, 2026, 3:22:40 PM)

xua_asp_fsm: Error on ASP UP (ACK) with non-unique ASP Identifier

Following RFC4666:
"""
   The "Invalid ASP Identifier" error is sent by an SGP in response to
   an ASP Up message with an invalid (i.e., non-unique) ASP Identifier
"""

Change-Id: I2d422acaa2f04c7d1eebd92c3185c4f5476a1789
Pau Espin Pedrol at

#20443 (Feb 12, 2026, 3:22:36 PM)

xua_asp_fsm: Error on ASP UP (ACK) with non-unique ASP Identifier

Following RFC4666:
"""
   The "Invalid ASP Identifier" error is sent by an SGP in response to
   an ASP Up message with an invalid (i.e., non-unique) ASP Identifier
"""

Change-Id: I2d422acaa2f04c7d1eebd92c3185c4f5476a1789
Pau Espin Pedrol at

#20442 (Feb 12, 2026, 2:49:20 PM)

xua_asp_fsm: Remove obvious comments

Those can already be interpretred directly by the ENSURE_* macros.
No need to clog the file with more lines describing stuff.

Change-Id: Idec06646c48fbce4cbe200e88f987dfb3e9d5a39
Pau Espin Pedrol at

#20441 (Feb 12, 2026, 2:49:16 PM)

xua_asp_fsm: Remove obvious comments

Those can already be interpretred directly by the ENSURE_* macros.
No need to clog the file with more lines describing stuff.

Change-Id: Idec06646c48fbce4cbe200e88f987dfb3e9d5a39
Pau Espin Pedrol at

#20440 (Feb 12, 2026, 1:26:11 PM)

Allow configuring local ASP Identifier

If configured, it will be transmitted during ASP UP and ASP UP ACK.
This may be needed if facing an SG/IPSP peer who requires ASP Identifier
to be set.

Related: OS#6953
Change-Id: Ib94d542f940e13d5c007bc3319e7dde65cf81f12
Pau Espin Pedrol at

#20439 (Feb 12, 2026, 1:25:55 PM)

Allow configuring local ASP Identifier

If configured, it will be transmitted during ASP UP and ASP UP ACK.
This may be needed if facing an SG/IPSP peer who requires ASP Identifier
to be set.

Related: OS#6953
Change-Id: Ib94d542f940e13d5c007bc3319e7dde65cf81f12
Pau Espin Pedrol at

#20438 (Feb 12, 2026, 12:49:04 PM)

xua_as_fsm: Remove TODO no longer valid

Routing Context is filled in in fill_notify_route_ctx().

Take the chance to move the logging a bit up in the function, to have
all npar filling together.

Change-Id: I57af18dacc0470d36ddd4705a9530bd44b31f9c0
Pau Espin Pedrol at

#20437 (Feb 12, 2026, 12:49:02 PM)

xua_as_fsm: Remove TODO no longer valid

Routing Context is filled in in fill_notify_route_ctx().

Take the chance to move the logging a bit up in the function, to have
all npar filling together.

Change-Id: I57af18dacc0470d36ddd4705a9530bd44b31f9c0
Pau Espin Pedrol at

#20436 (Feb 12, 2026, 11:37:49 AM)

xua_default_lm_fsm: Submit RKM REG REQ for all AS in ASP

So far only thre first rctx (AS) was being registered.
This fixes RKM for ASPs serving multiple AS in ASP/IPSP role.

Relted: OS#6943
Change-Id: I932c1b05dfd37fd7b89adea0d1ea59a5dc6138b4
Pau Espin Pedrol at

#20435 (Feb 12, 2026, 11:37:49 AM)

xua_default_lm_fsm: Submit RKM REG REQ for all AS in ASP

So far only thre first rctx (AS) was being registered.
This fixes RKM for ASPs serving multiple AS in ASP/IPSP role.

Relted: OS#6943
Change-Id: I932c1b05dfd37fd7b89adea0d1ea59a5dc6138b4
Pau Espin Pedrol at

#20434 (Feb 12, 2026, 11:25:19 AM)

ss7_as: Optimize ss7_as_asp_assoc_find()

Look for counterpart on the object with the shortest list, ie. convert
from O(N) to O(min(N,M)).
This way eg. if we have 100 ASPs on 1 AS, lookup time becomes O(1).
Same if we have eg. 1 ASP serving 100 AS.

Change-Id: I139aede15af6b6a77d19e6fcf6b6abe8ed6599a6
Pau Espin Pedrol at

#20433 (Feb 12, 2026, 11:25:19 AM)

asp: Introduce asp->assoc_as_list

This way we can iterate easily/quickly the AS served by a given ASP.
This in turn allows simplifying some code since we cache the amount of
AS served by the ASP at any time, so we save some counting.

Related: SYS#6953
Change-Id: I1ca90748286374109dbb4277cbc7b2337ce2072a
Pau Espin Pedrol at

#20432 (Feb 12, 2026, 11:25:16 AM)

ss7_as: Optimize ss7_as_asp_assoc_find()

Look for counterpart on the object with the shortest list, ie. convert
from O(N) to O(min(N,M)).
This way eg. if we have 100 ASPs on 1 AS, lookup time becomes O(1).
Same if we have eg. 1 ASP serving 100 AS.

Change-Id: I139aede15af6b6a77d19e6fcf6b6abe8ed6599a6
Pau Espin Pedrol at

#20431 (Feb 12, 2026, 11:25:16 AM)

asp: Introduce asp->assoc_as_list

This way we can iterate easily/quickly the AS served by a given ASP.
This in turn allows simplifying some code since we cache the amount of
AS served by the ASP at any time, so we save some counting.

Related: SYS#6953
Change-Id: I1ca90748286374109dbb4277cbc7b2337ce2072a
Pau Espin Pedrol at

#20430 (Feb 12, 2026, 11:06:10 AM)

WIP: asp: Introduce asp->assoc_as_list

Related: SYS#6953
Change-Id: I1ca90748286374109dbb4277cbc7b2337ce2072a
Pau Espin Pedrol at

#20429 (Feb 12, 2026, 11:06:10 AM)

ss7_as: Optimize ss7_as_asp_assoc_find()

Look for counterpart on the object with the shortest list, ie. convert
from O(N) to O(min(N,M)).
This way eg. if we have 100 ASPs on 1 AS, lookup time becomes O(1).
Same if we have eg. 1 ASP serving 100 AS.

Change-Id: I139aede15af6b6a77d19e6fcf6b6abe8ed6599a6
Pau Espin Pedrol at

#20428 (Feb 12, 2026, 11:06:09 AM)

WIP: asp: Introduce asp->assoc_as_list

Related: SYS#6953
Change-Id: I1ca90748286374109dbb4277cbc7b2337ce2072a
Pau Espin Pedrol at

#20427 (Feb 12, 2026, 11:06:09 AM)

ss7_as: Optimize ss7_as_asp_assoc_find()

Look for counterpart on the object with the shortest list, ie. convert
from O(N) to O(min(N,M)).
This way eg. if we have 100 ASPs on 1 AS, lookup time becomes O(1).
Same if we have eg. 1 ASP serving 100 AS.

Change-Id: I139aede15af6b6a77d19e6fcf6b6abe8ed6599a6
Pau Espin Pedrol at

#20426 (Feb 12, 2026, 10:32:42 AM)

Introduce struct osmo_ss7_as_asp_assoc

This new struct allows supporting unlimited number of ASPs per AS.
It can also potentially be used in the future to:
* Hold M3UA "ASP Identifier" per AS<->ASP association
* Speed up iterating over AS served by a given ASP.

NOTE: Having >16 ASPs per AS may not be desirable, for instance under
loadshare traffic mode ITU SLS is 4 bit, so despite having ext_sls
extending the table to 128 entries based on OPC, it may not provide
enough entropy to properly loadshare among all of them.

Related: OS#7519
Change-Id: I149ab467899633ac50cba3e482b2cae02124279d
Pau Espin Pedrol at

#20425 (Feb 12, 2026, 10:32:42 AM)

tests/vty: Introduce testTonsOfASP

Add test to validate tons of ASPs (1000) can be configured, all serving
one given AS.

Related: SYS#7519
Change-Id: I9bfcfcbea3c4cec0e6284ae59d30670fcf3ccac4
Pau Espin Pedrol at

#20424 (Feb 12, 2026, 10:32:41 AM)

ss7_as: Optimize ASP Tx selection in Override traffic mode

Cache the last selected ASP, and expect it to still be the active ASP
most of the time until it changes.

Change-Id: I3d480d23591f4bd216293be60b22389b182fd8f3
Pau Espin Pedrol at

#20423 (Feb 12, 2026, 10:32:39 AM)

tests/vty: Introduce testASPservesTonsOfAS

Change-Id: I39016a479fde7d61b7c0f39ca769cd8c958b55b6
Pau Espin Pedrol at

#20422 (Feb 12, 2026, 10:32:39 AM)

Introduce struct osmo_ss7_as_asp_assoc

This new struct allows supporting unlimited number of ASPs per AS.
It can also potentially be used in the future to:
* Hold M3UA "ASP Identifier" per AS<->ASP association
* Speed up iterating over AS served by a given ASP.

NOTE: Having >16 ASPs per AS may not be desirable, for instance under
loadshare traffic mode ITU SLS is 4 bit, so despite having ext_sls
extending the table to 128 entries based on OPC, it may not provide
enough entropy to properly loadshare among all of them.

Related: OS#7519
Change-Id: I149ab467899633ac50cba3e482b2cae02124279d
Pau Espin Pedrol at

#20421 (Feb 12, 2026, 10:32:38 AM)

ss7_as: Optimize ASP Tx selection in Override traffic mode

Cache the last selected ASP, and expect it to still be the active ASP
most of the time until it changes.

Change-Id: I3d480d23591f4bd216293be60b22389b182fd8f3
Pau Espin Pedrol at

#20420 (Feb 12, 2026, 10:32:38 AM)

tests/vty: Introduce testTonsOfASP

Add test to validate tons of ASPs (1000) can be configured, all serving
one given AS.

Related: SYS#7519
Change-Id: I9bfcfcbea3c4cec0e6284ae59d30670fcf3ccac4
Pau Espin Pedrol at

#20419 (Feb 12, 2026, 10:32:36 AM)

tests/vty: Introduce testASPservesTonsOfAS

Change-Id: I39016a479fde7d61b7c0f39ca769cd8c958b55b6
Pau Espin Pedrol at