Skip to content

Loading builds...

Changes

#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

#20418 (Feb 11, 2026, 4:36:35 PM)

tests/vty: Introduce testASPservesTonsOfAS

Change-Id: I39016a479fde7d61b7c0f39ca769cd8c958b55b6
Pau Espin Pedrol at

#20417 (Feb 11, 2026, 4:36:35 PM)

tests/vty: Introduce testASPservesTonsOfAS

Change-Id: I39016a479fde7d61b7c0f39ca769cd8c958b55b6
Pau Espin Pedrol at

#20416 (Feb 11, 2026, 4:10:02 PM)

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

#20415 (Feb 11, 2026, 4:10:02 PM)

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

#20414 (Feb 11, 2026, 3:30:42 PM)

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

#20413 (Feb 11, 2026, 3:30:42 PM)

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

#20412 (Feb 11, 2026, 12:49:02 PM)

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

#20411 (Feb 11, 2026, 12:48:50 PM)

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

#20410 (Feb 11, 2026, 12:47:57 PM)

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

#20409 (Feb 11, 2026, 12:47:51 PM)

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

#20408 (Feb 11, 2026, 12:46:55 PM)

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

#20407 (Feb 11, 2026, 12:46:54 PM)

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

#20406 (Feb 11, 2026, 12:45:44 PM)

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

#20405 (Feb 11, 2026, 12:45:39 PM)

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

#20404 (Feb 11, 2026, 5:20:05 AM)

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

#20403 (Feb 11, 2026, 5:20:04 AM)

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

#20402 (Feb 10, 2026, 5:09:03 PM)

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

#20401 (Feb 10, 2026, 5:09:00 PM)

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

#20400 (Feb 10, 2026, 3:41:35 PM)

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

#20399 (Feb 10, 2026, 3:41:32 PM)

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

#20398 (Feb 10, 2026, 3:08:38 PM)

cosmetic: ss7_asp.h: Drop comment no longer valid

Since a while ago, remote asp ID is stored in asp->remote_asp_id.

Fixes: b8fe5e4a1adfb54f265efc81432eab6252e9b04f
Change-Id: I2253b1cb9e24270b9d6b3400d3fa20827c66ad23
Pau Espin Pedrol at

#20397 (Feb 10, 2026, 3:08:38 PM)

cosmetic: ss7_asp.h: Drop comment no longer valid

Since a while ago, remote asp ID is stored in asp->remote_asp_id.

Fixes: b8fe5e4a1adfb54f265efc81432eab6252e9b04f
Change-Id: I2253b1cb9e24270b9d6b3400d3fa20827c66ad23
Pau Espin Pedrol at

#20396 (Feb 10, 2026, 1:01:34 PM)

xua_snm: assert for unexpected condition

The rx DUNA/DAVA/DUPU paths are already guarded at m3ua.c and sua.c to
only call xua_snm_rx_{duna,dava,dupu}() in ASP role. Hence, calling
those functions is expected to always happen in ASP role.

Change-Id: I24bb335a2a856bf1a5ca255f7afbfe103ebcd86f
Pau Espin Pedrol at

#20395 (Feb 10, 2026, 1:01:33 PM)

xua_snm: assert for unexpected condition

The rx DUNA/DAVA/DUPU paths are already guarded at m3ua.c and sua.c to
only call xua_snm_rx_{duna,dava,dupu}() in ASP role. Hence, calling
those functions is expected to always happen in ASP role.

Change-Id: I24bb335a2a856bf1a5ca255f7afbfe103ebcd86f
Pau Espin Pedrol at

#20394 (Feb 10, 2026, 1:01:15 PM)

xua_snm: assert for unexpected condition

The rx DUNA/DAVA/DUPU paths are already guarded at m3ua.c and sua.c to
only call xua_snm_rx_{duna,dava,dupu}() in ASP role. Hence, calling
those functions is expected to always happen in ASP role.

Change-Id: I24bb335a2a856bf1a5ca255f7afbfe103ebcd86f
Pau Espin Pedrol at

#20393 (Feb 10, 2026, 1:01:13 PM)

xua_snm: assert for unexpected condition

The rx DUNA/DAVA/DUPU paths are already guarded at m3ua.c and sua.c to
only call xua_snm_rx_{duna,dava,dupu}() in ASP role. Hence, calling
those functions is expected to always happen in ASP role.

Change-Id: I24bb335a2a856bf1a5ca255f7afbfe103ebcd86f
Pau Espin Pedrol at

#20392 (Feb 10, 2026, 12:47:19 PM)

xua: Improve logging around unexpected snm messages

Log rx of unexpected message type according to configured role.
Decrease verbosity of DAUD logging to match the new logging.

For SUA we can use M3UA's m3ua_snm_msgt_names because the value/strings
are the same and they are actually used through m3ua_msg_class_snm in
xua_dialect_sua.

Change-Id: I697e52dfd733cb9ee260bba133204a7462c4e8ee
Pau Espin Pedrol at

#20391 (Feb 10, 2026, 12:47:19 PM)

xua: Improve logging around unexpected snm messages

Log rx of unexpected message type according to configured role.
Decrease verbosity of DAUD logging to match the new logging.

For SUA we can use M3UA's m3ua_snm_msgt_names because the value/strings
are the same and they are actually used through m3ua_msg_class_snm in
xua_dialect_sua.

Change-Id: I697e52dfd733cb9ee260bba133204a7462c4e8ee
Pau Espin Pedrol at

#20390 (Feb 10, 2026, 12:32:38 PM)

xua: Allow rx DAUD in IPSP with quirk daud_in_asp

That quirk was added back in time most probably when interacting with
some peer who claimed to be in SG mode but actually was in IPSP mode.
Hence, to be on the safe side, be relaxed and allow accepting DAUD also
if the quirk is added, otherwise it may be impossible to continue
communication with that faulty peer.
In theory according to spec DAUD should only be sent ASP->SG.

Change-Id: I8ad0889f4584446f8b01f1255498f57e0cd34012
Pau Espin Pedrol at

#20389 (Feb 10, 2026, 12:32:37 PM)

xua: Allow rx DAUD in IPSP with quirk daud_in_asp

That quirk was added back in time most probably when interacting with
some peer who claimed to be in SG mode but actually was in IPSP mode.
Hence, to be on the safe side, be relaxed and allow accepting DAUD also
if the quirk is added, otherwise it may be impossible to continue
communication with that faulty peer.
In theory according to spec DAUD should only be sent ASP->SG.

Change-Id: I8ad0889f4584446f8b01f1255498f57e0cd34012
Pau Espin Pedrol at

#20388 (Feb 9, 2026, 5:30:59 PM)

sua: Support rx SCON in role=ASP

Change-Id: I1e4146c2cb8fab460d5e810b602c20293272c2e4
Pau Espin Pedrol at

#20387 (Feb 9, 2026, 5:30:58 PM)

sua: Support rx SCON in role=SG

Change-Id: Ide2b4f876ddbdb1bb0bfed11fad6fc13aaf1afda
Pau Espin Pedrol at

#20386 (Feb 9, 2026, 5:30:58 PM)

sua: Support rx SCON in role=IPSP

Change-Id: I3f46b634084c1d71643812828d4f114ab45dffde
Pau Espin Pedrol at

#20385 (Feb 9, 2026, 5:30:53 PM)

sua: Support rx SCON in role=SG

Change-Id: Ide2b4f876ddbdb1bb0bfed11fad6fc13aaf1afda
Pau Espin Pedrol at

#20384 (Feb 9, 2026, 5:30:52 PM)

sua: Support rx SCON in role=ASP

Change-Id: I1e4146c2cb8fab460d5e810b602c20293272c2e4
Pau Espin Pedrol at

#20383 (Feb 9, 2026, 5:30:52 PM)

sua: Support rx SCON in role=IPSP

Change-Id: I3f46b634084c1d71643812828d4f114ab45dffde
Pau Espin Pedrol at

#20382 (Feb 9, 2026, 4:37:17 PM)

xua_aspm_fsm: Remove unneeded workaround submitting XUA_ASP_E_M_ASP_ACTIVE_REQ

Sending that kind of event is up to the layer manager.
Right now, all ASPs (except ipa_aspm_fsm, which don't need that event
because there's no ACTIVATE in IPA) have an associated layer manager
FSM, so that workaround is not needed.

Change-Id: If6c2c5b6ffc4080320aadc550d823abc5d613d6f
Pau Espin Pedrol at

#20381 (Feb 9, 2026, 4:37:15 PM)

xua_aspm_fsm: Remove unneeded workaround submitting XUA_ASP_E_M_ASP_ACTIVE_REQ

Sending that kind of event is up to the layer manager.
Right now, all ASPs (except ipa_aspm_fsm, which don't need that event
because there's no ACTIVATE in IPA) have an associated layer manager
FSM, so that workaround is not needed.

Change-Id: If6c2c5b6ffc4080320aadc550d823abc5d613d6f
Pau Espin Pedrol at

#20380 (Feb 9, 2026, 4:29:17 PM)

xua_as_fsm: Trigger PC (un)availability to upper layers in IPSP

Same as done in ASP. This is specially important in IPSP in order to
trigger availability/unavailability of PCs defined in the SCCP
addressbook.

Change-Id: I0e6015f04ad0647cc151d3c772355a18cb55547a
Pau Espin Pedrol at

#20379 (Feb 9, 2026, 4:29:15 PM)

xua_as_fsm: Trigger PC (un)availability to upper layers in IPSP

Same as done in ASP. This is specially important in IPSP in order to
trigger availability/unavailability of PCs defined in the SCCP
addressbook.

Change-Id: I0e6015f04ad0647cc151d3c772355a18cb55547a
Pau Espin Pedrol at

#20378 (Feb 9, 2026, 2:25:05 PM)

logging: Support nonblocking-io for log target stderr & file, make it default

The nonblocking-io used to be the mode used until recently, where wq
only was used if the write buffer was full.
This is more performant that always waiting for poll() to write, plus
the fact that we write to system synchronously, hence seeing output
immediatelly or not losing it if program crashes.
Furthermore, It turns out using wq in multithreaded programs may cause
problems, so better switch back to using nonblocking-io by default.

Related: OS#6947
Change-Id: I46420f4b174d3a9ed01e993e2e89aea3b46c0dd7
Pau Espin Pedrol at

#20377 (Feb 9, 2026, 2:25:04 PM)

logging: Support nonblocking-io for log target stderr & file, make it default

The nonblocking-io used to be the mode used until recently, where wq
only was used if the write buffer was full.
This is more performant that always waiting for poll() to write, plus
the fact that we write to system synchronously, hence seeing output
immediatelly or not losing it if program crashes.
Furthermore, It turns out using wq in multithreaded programs may cause
problems, so better switch back to using nonblocking-io by default.

Related: OS#6947
Change-Id: I46420f4b174d3a9ed01e993e2e89aea3b46c0dd7
Pau Espin Pedrol at

#20376 (Feb 9, 2026, 2:25:02 PM)

logging: Support nonblocking-io for log target stderr & file, make it default

The nonblocking-io used to be the mode used until recently, where wq
only was used if the write buffer was full.
This is more performant that always waiting for poll() to write, plus
the fact that we write to system synchronously, hence seeing output
immediatelly or not losing it if program crashes.
Furthermore, It turns out using wq in multithreaded programs may cause
problems, so better switch back to using nonblocking-io by default.

Related: OS#6947
Change-Id: I46420f4b174d3a9ed01e993e2e89aea3b46c0dd7
Pau Espin Pedrol at

#20375 (Feb 9, 2026, 1:34:04 PM)

logging: Support nonblocking-io for log target stderr & file, make it default

The nonblocking-io used to be the mode used until recently, where wq
only was used if the write buffer was full.
This is more performant that always waiting for poll() to write, plus
the fact that we write to system synchronously, hence seeing output
immediatelly or not losing it if program crashes.
Furthermore, It turns out using wq in multithreaded programs may cause
problems, so better switch back to using nonblocking-io by default.

Related: OS#6947
Change-Id: I46420f4b174d3a9ed01e993e2e89aea3b46c0dd7
Pau Espin Pedrol at

#20374 (Feb 9, 2026, 1:34:03 PM)

logging: Support nonblocking-io for log target stderr & file, make it default

The nonblocking-io used to be the mode used until recently, where wq
only was used if the write buffer was full.
This is more performant that always waiting for poll() to write, plus
the fact that we write to system synchronously, hence seeing output
immediatelly or not losing it if program crashes.
Furthermore, It turns out using wq in multithreaded programs may cause
problems, so better switch back to using nonblocking-io by default.

Related: OS#6947
Change-Id: I46420f4b174d3a9ed01e993e2e89aea3b46c0dd7
Pau Espin Pedrol at

#20373 (Feb 9, 2026, 1:34:02 PM)

logging: Support nonblocking-io for log target stderr & file, make it default

The nonblocking-io used to be the mode used until recently, where wq
only was used if the write buffer was full.
This is more performant that always waiting for poll() to write, plus
the fact that we write to system synchronously, hence seeing output
immediatelly or not losing it if program crashes.
Furthermore, It turns out using wq in multithreaded programs may cause
problems, so better switch back to using nonblocking-io by default.

Related: OS#6947
Change-Id: I46420f4b174d3a9ed01e993e2e89aea3b46c0dd7
Pau Espin Pedrol at

#20372 (Feb 9, 2026, 1:00:33 PM)

logging: Support nonblocking-io for log target stderr & file, make it default

The nonblocking-io used to be the mode used until recently, where wq
only was used if the write buffer was full.
This is more performant that always waiting for poll() to write, plus
the fact that we write to system synchronously, hence seeing output
immediatelly or not losing it if program crashes.
Furthermore, It turns out using wq in multithreaded programs may cause
problems, so better switch back to using nonblocking-io by default.

Related: OS#6947
Change-Id: I46420f4b174d3a9ed01e993e2e89aea3b46c0dd7
Pau Espin Pedrol at

#20371 (Feb 9, 2026, 1:00:33 PM)

logging: Support nonblocking-io for log target stderr & file, make it default

The nonblocking-io used to be the mode used until recently, where wq
only was used if the write buffer was full.
This is more performant that always waiting for poll() to write, plus
the fact that we write to system synchronously, hence seeing output
immediatelly or not losing it if program crashes.
Furthermore, It turns out using wq in multithreaded programs may cause
problems, so better switch back to using nonblocking-io by default.

Related: OS#6947
Change-Id: I46420f4b174d3a9ed01e993e2e89aea3b46c0dd7
Pau Espin Pedrol at

#20370 (Feb 9, 2026, 1:00:27 PM)

logging: Support nonblocking-io for log target stderr & file, make it default

The nonblocking-io used to be the mode used until recently, where wq
only was used if the write buffer was full.
This is more performant that always waiting for poll() to write, plus
the fact that we write to system synchronously, hence seeing output
immediatelly or not losing it if program crashes.
Furthermore, It turns out using wq in multithreaded programs may cause
problems, so better switch back to using nonblocking-io by default.

Related: OS#6947
Change-Id: I46420f4b174d3a9ed01e993e2e89aea3b46c0dd7
Pau Espin Pedrol at

#20369 (Feb 9, 2026, 12:36:34 PM)

Add CAS channel support

CAS is currently supported by e1d driver only.

Change-Id: I81cc89e01bb4207dc899ab28f24a131f24b61c9c
Andreas Eversberg at

#20368 (Feb 9, 2026, 12:36:31 PM)

Add CAS channel support

CAS is currently supported by e1d driver only.

Change-Id: I81cc89e01bb4207dc899ab28f24a131f24b61c9c
Andreas Eversberg at

#20367 (Feb 9, 2026, 11:58:35 AM)

logging: Fix print tid value in multithreadded programs

Change-Id: I363751ab1368d916aad8905b056ec4f9d62b7175
Pau Espin Pedrol at

#20366 (Feb 9, 2026, 11:58:34 AM)

logging: Fix print tid value in multithreadded programs

Change-Id: I363751ab1368d916aad8905b056ec4f9d62b7175
Pau Espin Pedrol at

#20365 (Feb 9, 2026, 11:58:34 AM)

logging: Fix print tid value in multithreadded programs

Change-Id: I363751ab1368d916aad8905b056ec4f9d62b7175
Pau Espin Pedrol at

#20364 (Feb 9, 2026, 11:36:10 AM)

osmo_io_uring: Split global init from per-thread init

osmo_iofd_init() is expected to be called per-thread, while some code in
osmo_iofd_uring_init() was only expected to be called once.

Change-Id: Ifa5c46d7532ea49869f3cfe7268fdd082906fd10
Pau Espin Pedrol at

#20363 (Feb 9, 2026, 11:36:10 AM)

osmo_io: Lazy-initialize during osmo_iofd_setup()

This way new threads (!=main) don't need to explicitly call
osmo_iofd_init() explicitly before using osmo_io. This is specially
useful for threads using osmo_io indirectly, eg, when logging.

The osmo_iofd_setup() API is really the only main API which requires
initialization. All other APIs requiring it come after osmo_iofd_setup()
since they use an osmo_iofd pointer.

Change-Id: Ia543c1b9d111c929cd9dbed266b6d21b74e47e4b
Pau Espin Pedrol at

#20362 (Feb 9, 2026, 11:36:10 AM)

osmo_io_uring: Split global init from per-thread init

osmo_iofd_init() is expected to be called per-thread, while some code in
osmo_iofd_uring_init() was only expected to be called once.

Change-Id: Ifa5c46d7532ea49869f3cfe7268fdd082906fd10
Pau Espin Pedrol at

#20361 (Feb 9, 2026, 11:36:10 AM)

osmo_io: Lazy-initialize during osmo_iofd_setup()

This way new threads (!=main) don't need to explicitly call
osmo_iofd_init() explicitly before using osmo_io. This is specially
useful for threads using osmo_io indirectly, eg, when logging.

The osmo_iofd_setup() API is really the only main API which requires
initialization. All other APIs requiring it come after osmo_iofd_setup()
since they use an osmo_iofd pointer.

Change-Id: Ia543c1b9d111c929cd9dbed266b6d21b74e47e4b
Pau Espin Pedrol at

#20360 (Feb 9, 2026, 11:36:08 AM)

osmo_io_uring: Split global init from per-thread init

osmo_iofd_init() is expected to be called per-thread, while some code in
osmo_iofd_uring_init() was only expected to be called once.

Change-Id: Ifa5c46d7532ea49869f3cfe7268fdd082906fd10
Pau Espin Pedrol at

#20359 (Feb 9, 2026, 11:36:08 AM)

osmo_io: Lazy-initialize during osmo_iofd_setup()

This way new threads (!=main) don't need to explicitly call
osmo_iofd_init() explicitly before using osmo_io. This is specially
useful for threads using osmo_io indirectly, eg, when logging.

The osmo_iofd_setup() API is really the only main API which requires
initialization. All other APIs requiring it come after osmo_iofd_setup()
since they use an osmo_iofd pointer.

Change-Id: Ia543c1b9d111c929cd9dbed266b6d21b74e47e4b
Pau Espin Pedrol at

#20358 (Feb 9, 2026, 11:04:00 AM)

osmo_io: Move function declaration to internal header

Change-Id: I25ffb94e00225bcdc565f56a3f0f7834df00e974
Pau Espin Pedrol at

#20357 (Feb 9, 2026, 11:03:58 AM)

osmo_io: Move function declaration to internal header

Change-Id: I25ffb94e00225bcdc565f56a3f0f7834df00e974
Pau Espin Pedrol at

#20356 (Feb 9, 2026, 11:03:58 AM)

osmo_io: Move function declaration to internal header

Change-Id: I25ffb94e00225bcdc565f56a3f0f7834df00e974
Pau Espin Pedrol at

#20355 (Feb 7, 2026, 1:55:10 PM)

Add Channel-Associated Signalling (CAS) support

CAS frames are sent and received repeatedly. They consist of 16 frames
(octets) on time slot 16. This is a CAS multiframe. This multiframe
carries 30 individual CAS signaling channels.

Whenever a CAS frames changes, an event (E1DP_EVT_CAS) is forwarded to
the e1d client. The event includes one octet with the CAS information.

The e1d client requests to transmit a new CAS frame by sending a command
(E1DP_CMD_CAS). The command includes one octet with the CAS information.

The e1d client requests to receive current CAS frame of a given time
slot by setting a query flag in the E1DP_CMD_CAS command. This is useful
if the CAS signals changed before the application was started.

The lower 4 bits of each octet in the message represent the signaling
sub-channels: A, B, C and D. They are packed like this: 'xxxxABCD'

To enable cas support on an interface, set line attribute "cas" via VTY.

Change-Id: Ib4f5e6ef02c9b0d1eec2a86d9c48376112805972
Andreas Eversberg at

#20354 (Feb 7, 2026, 1:55:10 PM)

Add Channel-Associated Signalling (CAS) support

CAS frames are sent and received repeatedly. They consist of 16 frames
(octets) on time slot 16. This is a CAS multiframe. This multiframe
carries 30 individual CAS signaling channels.

Whenever a CAS frames changes, an event (E1DP_EVT_CAS) is forwarded to
the e1d client. The event includes one octet with the CAS information.

The e1d client requests to transmit a new CAS frame by sending a command
(E1DP_CMD_CAS). The command includes one octet with the CAS information.

The e1d client requests to receive current CAS frame of a given time
slot by setting a query flag in the E1DP_CMD_CAS command. This is useful
if the CAS signals changed before the application was started.

The lower 4 bits of each octet in the message represent the signaling
sub-channels: A, B, C and D. They are packed like this: 'xxxxABCD'

To enable cas support on an interface, set line attribute "cas" via VTY.

Change-Id: Ib4f5e6ef02c9b0d1eec2a86d9c48376112805972
Andreas Eversberg at

#20353 (Feb 6, 2026, 5:20:35 PM)

xua_default_fsm: Support IPSP role

Change-Id: Id9ad8bbfce5cf15fedcba83034ae383e61d3b3a3
Pau Espin Pedrol at

#20352 (Feb 6, 2026, 5:20:34 PM)

xua_default_fsm: Support IPSP role

Change-Id: Id9ad8bbfce5cf15fedcba83034ae383e61d3b3a3
Pau Espin Pedrol at

#20351 (Feb 6, 2026, 5:15:31 PM)

ss7_asp: remove lm during ASP destroy

Otherwise the xua_default_lm_fsm instance is freed with talloc_free()
instead of osmo_fsm_inst_free().

Change-Id: Iee339b49d4b73a9afde60c4b8f6f5a03ad8a822d
Pau Espin Pedrol at

#20350 (Feb 6, 2026, 5:15:28 PM)

lm: Use layer manager also on transport-role=server

The upper layers (M3UA) should behave similarly eg. on role ASP
independently of transport role being client or server.

Change-Id: I5f0109463323f214e15610b2c4fe253b828fce3b
Pau Espin Pedrol at

#20349 (Feb 6, 2026, 5:14:59 PM)

vty: Prohibit confiruing an IPA ASP as IPSP

We could eventually define how the IPA CCM is expected to behave when in
IPSP role (eg. implementing/allowing both sides of IPA CCM, or assigning
an IPA CCM role based on TCP client/server), but that has not yet been
defined.

IPSP is actually a good candidate for IPA ASPs, since in IPA proto we
don't have SNM messaging either, and it's meant to be used
point-to-point (or through STP by assigning hardocded routes).

Change-Id: I18ad3e9ad4aac7a3d8e84483ba1bf09016520b54
Pau Espin Pedrol at

#20348 (Feb 6, 2026, 5:14:59 PM)

Document osmo_xua_layer_manager prim_cb

Change-Id: I1347c3538435985836ee5fe1d9dd42996e32ff94
Pau Espin Pedrol at

#20347 (Feb 6, 2026, 5:14:57 PM)

vty: Prohibit configuring an ASP as IPSP in an SG node

The spec explicitly prohibits it.

Change-Id: I38bbd9226bad478f8068d02f7a4d7b3711596208
Pau Espin Pedrol at

#20346 (Feb 6, 2026, 5:14:22 PM)

xua_rkm: Adapt RKM code to support IPSP

Related: OS#6474
Change-Id: I9c59d6fb43d4e7ceda552f156dd7761173545b11
Pau Espin Pedrol at

#20345 (Feb 6, 2026, 5:14:20 PM)

lm: Initialize layer manager also on role=SG

Right now the LM will stay in IDLE for role=SG, but it already provides
with an easier logic where all xUA ASPs (no matter their role) have an
associated FSM object, which can be extnded later on.
This way we already valdiate the FSM instance lifecycle wroks as
expected.
It also allows in the future more easily integrating the LM in role
IPSP, where it will need to be extended.

Change-Id: I1f25cf8371ba72d710796e01a9a967d3fafffb99
Pau Espin Pedrol at

#20344 (Feb 6, 2026, 5:14:16 PM)

vty: Allow configuring xua server in ASP mode

The xua server has nothing to do with a node being an ASP or an SG,
it used to allow transport server features (SCTP/TCP server).
One may want to configure an ASP role with a SCTCP server.

Change-Id: I9b07d2c96404b7b86c51fd9c7bab5e52a2343ade
Pau Espin Pedrol at

#20343 (Feb 6, 2026, 5:14:13 PM)

IPSP: don't route any incoming M3UA messages in IPSP case

An IPSP is a point-to-point association, and we must not route any
such messages.

Change-Id: Iad7280619ec5814cda7a179418079048a5955976
Pau Espin Pedrol at

#20342 (Feb 6, 2026, 5:14:12 PM)

xua_asp_fsm: Improvements to support IPSP

Change-Id: Ia268848ee9bb2f97a47ba9be60ecd16fbeb4fb40
Pau Espin Pedrol at

#20341 (Feb 6, 2026, 5:13:59 PM)

IPSP: Allow vty-configuration of IPSP role "ASPs"

We should now have everything in place to support IPSP-SE, let's
accept enabling IPSP role via the VTY.

Change-Id: I0f0fa881471b87a4bb82a0211c6fb6e4c50b48ec
Pau Espin Pedrol at

#20340 (Feb 6, 2026, 5:13:59 PM)

m3ua: Allow rx SCON in IPSP role

Change-Id: I49838219aab912243a761ab9b5167095e363c72b
Pau Espin Pedrol at

#20339 (Feb 6, 2026, 5:13:58 PM)

Move osmo_xlm_sap_down to ss7_asp.c

That's a generic function to interact with the ASP from the LM.
Only some of the primitives are related to RKM.

Change-Id: I9a8d0e0fc1fd193db8dd3901911848ed8564616f
Pau Espin Pedrol at

#20338 (Feb 6, 2026, 5:13:16 PM)

IPSP: Add a comment that it's intentional to drop all M3UA SNM for IPSP

An IPSP doesn't have MTP3 network management.

Change-Id: I7b87bf03964e7e9aac683ad860e511f83a685821
Pau Espin Pedrol at

#20337 (Feb 6, 2026, 5:13:14 PM)

vty: Allow configuring xua timers in ASP mode

non-STP users of the API may also want to configure per-ASP timers, like
the Heartbeat timer.

Change-Id: I3801d10175f42c13e6f7994e1e4da8e7c99e8e16
Pau Espin Pedrol at

#20336 (Feb 6, 2026, 5:13:11 PM)

Refactor xua_layer_manager object

Several changes to improve separation of the LM object and its
lifecycle:
* Store in ss7_asp a pointer to a xua_layer_manager, which contains all
  implementation dependent information inside its priv pointer.
* Add a new free_func field to the xua_layer_manager struct in order to
  be able to free it without knowing how it was allocated.
* Get rid og the loglevel param, LOGL_DEBUG was always passed and that
  was actually an implementation specific detail of the default xua
  layer manager.
* Pass pointer to function to be called by LM to submit primitives to
  M3UA.

Change-Id: Ia96ebf40444f46ad718d61befbecb523f267fd6c
Pau Espin Pedrol at

#20335 (Feb 6, 2026, 5:13:09 PM)

xua_default_fsm: Support IPSP role

Change-Id: Id9ad8bbfce5cf15fedcba83034ae383e61d3b3a3
Pau Espin Pedrol at

#20334 (Feb 6, 2026, 5:13:07 PM)

Move osmo_xua_layer_manager definition to ss7_asp.h

The struct osmo_xua_layer_manager has no relation to a xua_server, hence
move it to ss7_asp.h, where it is used.

Change-Id: If7efb8996de0c407f5a466ff959095c8872ddc76
Pau Espin Pedrol at

#20333 (Feb 6, 2026, 5:12:55 PM)

xua_default_lm_fsm: Move timer_cb further below

As usually done in osmo_fsm implemnetations.

Change-Id: Ibdc04d9ece0b3955da44849755a87ec28c17f140
Pau Espin Pedrol at

#20332 (Feb 6, 2026, 5:12:52 PM)

ss7_asp: remove lm during ASP destroy

Otherwise the xua_default_lm_fsm instance is freed with talloc_free()
instead of osmo_fsm_inst_free().

Change-Id: Iee339b49d4b73a9afde60c4b8f6f5a03ad8a822d
Pau Espin Pedrol at

#20331 (Feb 6, 2026, 5:12:52 PM)

Document osmo_xua_layer_manager prim_cb

Change-Id: I1347c3538435985836ee5fe1d9dd42996e32ff94
Pau Espin Pedrol at

#20330 (Feb 6, 2026, 5:12:11 PM)

Move osmo_xlm_sap_down to ss7_asp.c

That's a generic function to interact with the ASP from the LM.
Only some of the primitives are related to RKM.

Change-Id: I9a8d0e0fc1fd193db8dd3901911848ed8564616f
Pau Espin Pedrol at

#20329 (Feb 6, 2026, 5:11:59 PM)

vty: Prohibit configuring an ASP as IPSP in an SG node

The spec explicitly prohibits it.

Change-Id: I38bbd9226bad478f8068d02f7a4d7b3711596208
Pau Espin Pedrol at

#20328 (Feb 6, 2026, 5:11:57 PM)

lm: Initialize layer manager also on role=SG

Right now the LM will stay in IDLE for role=SG, but it already provides
with an easier logic where all xUA ASPs (no matter their role) have an
associated FSM object, which can be extnded later on.
This way we already valdiate the FSM instance lifecycle wroks as
expected.
It also allows in the future more easily integrating the LM in role
IPSP, where it will need to be extended.

Change-Id: I1f25cf8371ba72d710796e01a9a967d3fafffb99
Pau Espin Pedrol at

#20327 (Feb 6, 2026, 5:11:56 PM)

m3ua: Allow rx SCON in IPSP role

Change-Id: I49838219aab912243a761ab9b5167095e363c72b
Pau Espin Pedrol at

#20326 (Feb 6, 2026, 5:11:52 PM)

xua_rkm: Adapt RKM code to support IPSP

Related: OS#6474
Change-Id: I9c59d6fb43d4e7ceda552f156dd7761173545b11
Pau Espin Pedrol at

#20325 (Feb 6, 2026, 5:11:15 PM)

IPSP: Add a comment that it's intentional to drop all M3UA SNM for IPSP

An IPSP doesn't have MTP3 network management.

Change-Id: I7b87bf03964e7e9aac683ad860e511f83a685821
Pau Espin Pedrol at

#20324 (Feb 6, 2026, 5:10:50 PM)

vty: Prohibit confiruing an IPA ASP as IPSP

We could eventually define how the IPA CCM is expected to behave when in
IPSP role (eg. implementing/allowing both sides of IPA CCM, or assigning
an IPA CCM role based on TCP client/server), but that has not yet been
defined.

IPSP is actually a good candidate for IPA ASPs, since in IPA proto we
don't have SNM messaging either, and it's meant to be used
point-to-point (or through STP by assigning hardocded routes).

Change-Id: I18ad3e9ad4aac7a3d8e84483ba1bf09016520b54
Pau Espin Pedrol at

#20323 (Feb 6, 2026, 5:10:48 PM)

xua_asp_fsm: Improvements to support IPSP

Change-Id: Ia268848ee9bb2f97a47ba9be60ecd16fbeb4fb40
Pau Espin Pedrol at

#20322 (Feb 6, 2026, 5:10:46 PM)

IPSP: don't route any incoming M3UA messages in IPSP case

An IPSP is a point-to-point association, and we must not route any
such messages.

Change-Id: Iad7280619ec5814cda7a179418079048a5955976
Pau Espin Pedrol at

#20321 (Feb 6, 2026, 5:10:43 PM)

xua_default_fsm: Support IPSP role

Change-Id: Id9ad8bbfce5cf15fedcba83034ae383e61d3b3a3
Pau Espin Pedrol at

#20320 (Feb 6, 2026, 5:10:17 PM)

vty: Allow configuring xua timers in ASP mode

non-STP users of the API may also want to configure per-ASP timers, like
the Heartbeat timer.

Change-Id: I3801d10175f42c13e6f7994e1e4da8e7c99e8e16
Pau Espin Pedrol at

#20319 (Feb 6, 2026, 5:09:45 PM)

IPSP: Allow vty-configuration of IPSP role "ASPs"

We should now have everything in place to support IPSP-SE, let's
accept enabling IPSP role via the VTY.

Change-Id: I0f0fa881471b87a4bb82a0211c6fb6e4c50b48ec
Pau Espin Pedrol at

#20318 (Feb 6, 2026, 5:09:42 PM)

Refactor xua_layer_manager object

Several changes to improve separation of the LM object and its
lifecycle:
* Store in ss7_asp a pointer to a xua_layer_manager, which contains all
  implementation dependent information inside its priv pointer.
* Add a new free_func field to the xua_layer_manager struct in order to
  be able to free it without knowing how it was allocated.
* Get rid og the loglevel param, LOGL_DEBUG was always passed and that
  was actually an implementation specific detail of the default xua
  layer manager.
* Pass pointer to function to be called by LM to submit primitives to
  M3UA.

Change-Id: Ia96ebf40444f46ad718d61befbecb523f267fd6c
Pau Espin Pedrol at

#20317 (Feb 6, 2026, 5:09:42 PM)

lm: Use layer manager also on transport-role=server

The upper layers (M3UA) should behave similarly eg. on role ASP
independently of transport role being client or server.

Change-Id: I5f0109463323f214e15610b2c4fe253b828fce3b
Pau Espin Pedrol at

#20316 (Feb 6, 2026, 5:09:42 PM)

vty: Allow configuring xua server in ASP mode

The xua server has nothing to do with a node being an ASP or an SG,
it used to allow transport server features (SCTP/TCP server).
One may want to configure an ASP role with a SCTCP server.

Change-Id: I9b07d2c96404b7b86c51fd9c7bab5e52a2343ade
Pau Espin Pedrol at

#20315 (Feb 6, 2026, 5:09:41 PM)

Move osmo_xua_layer_manager definition to ss7_asp.h

The struct osmo_xua_layer_manager has no relation to a xua_server, hence
move it to ss7_asp.h, where it is used.

Change-Id: If7efb8996de0c407f5a466ff959095c8872ddc76
Pau Espin Pedrol at

#20314 (Feb 6, 2026, 5:09:40 PM)

xua_default_lm_fsm: Move timer_cb further below

As usually done in osmo_fsm implemnetations.

Change-Id: Ibdc04d9ece0b3955da44849755a87ec28c17f140
Pau Espin Pedrol at

#20313 (Feb 6, 2026, 2:35:01 PM)

tcap_as_loadshare: Fix asp selection if no tcap-range was found

Keep doing loadshare round-robin style, but select only active asps that
have tcap enabled in the config.

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

#20312 (Feb 6, 2026, 2:34:59 PM)

tcap_as_loadshare: Fix asp selection if no tcap-range was found

Keep doing loadshare round-robin style, but select only active asps that
have tcap enabled in the config.

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

#20311 (Feb 5, 2026, 4:17:00 PM)

tcap_as_loadshare: Fix asp selection if no tcap-range was found

Keep doing loadshare round-robin style, but select only active asps that
have tcap enabled in the config.

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

#20310 (Feb 5, 2026, 4:17:00 PM)

tcap_as_loadshare: Fix asp selection if no tcap-range was found

Keep doing loadshare round-robin style, but select only active asps that
have tcap enabled in the config.

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

#20309 (Feb 5, 2026, 2:52:49 PM)

power_control: lchan_ms_pwr_ctrl(): always log input values

Depending on the power control interval (P_Con_INTERVAL), the MS power
loop may delay the power control decision for a certain amount of SACCH
block periods.  In this case lchan_ms_pwr_ctrl() returns early and no
logging is printed at all.

Let's always log the input values (reported level, UL measurements)
early in lchan_ms_pwr_ctrl().  This is useful for debugging, and
this is exactly what lchan_bs_pwr_ctrl() does.

Change-Id: I3b8466f062624fc8a2ea6f8220c057d3812f2c35
Vadim Yanitskiy at

#20308 (Feb 5, 2026, 2:52:47 PM)

power_control: lchan_ms_pwr_ctrl(): always log input values

Depending on the power control interval (P_Con_INTERVAL), the MS power
loop may delay the power control decision for a certain amount of SACCH
block periods.  In this case lchan_ms_pwr_ctrl() returns early and no
logging is printed at all.

Let's always log the input values (reported level, UL measurements)
early in lchan_ms_pwr_ctrl().  This is useful for debugging, and
this is exactly what lchan_bs_pwr_ctrl() does.

Change-Id: I3b8466f062624fc8a2ea6f8220c057d3812f2c35
Vadim Yanitskiy at

#20307 (Feb 5, 2026, 2:47:06 PM)

lm: Initialize layer manager also on role=SG

Right now the LM will stay in IDLE for role=SG, but it already provides
with an easier logic where all xUA ASPs (no matter their role) have an
associated FSM object, which can be extnded later on.
This way we already valdiate the FSM instance lifecycle wroks as
expected.
It also allows in the future more easily integrating the LM in role
IPSP, where it will need to be extended.

Change-Id: I1f25cf8371ba72d710796e01a9a967d3fafffb99
Pau Espin Pedrol at

#20306 (Feb 5, 2026, 2:46:34 PM)

lm: Initialize layer manager also on role=SG

Right now the LM will stay in IDLE for role=SG, but it already provides
with an easier logic where all xUA ASPs (no matter their role) have an
associated FSM object, which can be extnded later on.
This way we already valdiate the FSM instance lifecycle wroks as
expected.
It also allows in the future more easily integrating the LM in role
IPSP, where it will need to be extended.

Change-Id: I1f25cf8371ba72d710796e01a9a967d3fafffb99
Pau Espin Pedrol at

#20305 (Feb 5, 2026, 2:45:09 PM)

power_control: lchan_ms_pwr_ctrl(): always log input values

Depending on the power control interval (P_Con_INTERVAL), the MS power
loop may delay the power control decision for a certain amount of SACCH
block periods.  In this case lchan_ms_pwr_ctrl() returns early and no
logging is printed at all.

Let's always log the input values (reported level, UL measurements)
early in lchan_ms_pwr_ctrl().  This is useful for debugging, and
this is exactly what lchan_bs_pwr_ctrl() does.

Change-Id: I3b8466f062624fc8a2ea6f8220c057d3812f2c35
Vadim Yanitskiy at

#20304 (Feb 5, 2026, 2:45:07 PM)

power_control: lchan_ms_pwr_ctrl(): always log input values

Depending on the power control interval (P_Con_INTERVAL), the MS power
loop may delay the power control decision for a certain amount of SACCH
block periods.  In this case lchan_ms_pwr_ctrl() returns early and no
logging is printed at all.

Let's always log the input values (reported level, UL measurements)
early in lchan_ms_pwr_ctrl().  This is useful for debugging, and
this is exactly what lchan_bs_pwr_ctrl() does.

Change-Id: I3b8466f062624fc8a2ea6f8220c057d3812f2c35
Vadim Yanitskiy at

#20303 (Feb 5, 2026, 2:15:02 PM)

xua_default_lm_fsm: Move timer_cb further below

As usually done in osmo_fsm implemnetations.

Change-Id: Ibdc04d9ece0b3955da44849755a87ec28c17f140
Pau Espin Pedrol at

#20302 (Feb 5, 2026, 2:15:02 PM)

lm: Use layer manager also on transport-role=server

The upper layers (M3UA) should behave similarly eg. on role ASP
independently of transport role being client or server.

Change-Id: I5f0109463323f214e15610b2c4fe253b828fce3b
Pau Espin Pedrol at

#20301 (Feb 5, 2026, 2:15:01 PM)

xua_default_lm_fsm: Move timer_cb further below

As usually done in osmo_fsm implemnetations.

Change-Id: Ibdc04d9ece0b3955da44849755a87ec28c17f140
Pau Espin Pedrol at

#20300 (Feb 5, 2026, 2:15:01 PM)

lm: Use layer manager also on transport-role=server

The upper layers (M3UA) should behave similarly eg. on role ASP
independently of transport role being client or server.

Change-Id: I5f0109463323f214e15610b2c4fe253b828fce3b
Pau Espin Pedrol at

#20299 (Feb 5, 2026, 1:04:10 PM)

Refactor xua_layer_manager object

Several changes to improve separation of the LM object and its
lifecycle:
* Store in ss7_asp a pointer to a xua_layer_manager, which contains all
  implementation dependent information inside its priv pointer.
* Add a new free_func field to the xua_layer_manager struct in order to
  be able to free it without knowing how it was allocated.
* Get rid og the loglevel param, LOGL_DEBUG was always passed and that
  was actually an implementation specific detail of the default xua
  layer manager.
* Pass pointer to function to be called by LM to submit primitives to
  M3UA.

Change-Id: Ia96ebf40444f46ad718d61befbecb523f267fd6c
Pau Espin Pedrol at

#20298 (Feb 5, 2026, 1:04:09 PM)

Refactor xua_layer_manager object

Several changes to improve separation of the LM object and its
lifecycle:
* Store in ss7_asp a pointer to a xua_layer_manager, which contains all
  implementation dependent information inside its priv pointer.
* Add a new free_func field to the xua_layer_manager struct in order to
  be able to free it without knowing how it was allocated.
* Get rid og the loglevel param, LOGL_DEBUG was always passed and that
  was actually an implementation specific detail of the default xua
  layer manager.
* Pass pointer to function to be called by LM to submit primitives to
  M3UA.

Change-Id: Ia96ebf40444f46ad718d61befbecb523f267fd6c
Pau Espin Pedrol at

#20297 (Feb 5, 2026, 1:03:04 PM)

Move osmo_xlm_sap_down to ss7_asp.c

That's a generic function to interact with the ASP from the LM.
Only some of the primitives are related to RKM.

Change-Id: I9a8d0e0fc1fd193db8dd3901911848ed8564616f
Pau Espin Pedrol at

#20296 (Feb 5, 2026, 1:03:04 PM)

Move osmo_xlm_sap_down to ss7_asp.c

That's a generic function to interact with the ASP from the LM.
Only some of the primitives are related to RKM.

Change-Id: I9a8d0e0fc1fd193db8dd3901911848ed8564616f
Pau Espin Pedrol at

#20295 (Feb 5, 2026, 12:58:33 PM)

Refactor xua_layer_manager object

Several changes to improve separation of the LM object and its
lifecycle:
* Store in ss7_asp a pointer to a xua_layer_manager, which contains all
  implementation dependent information inside its priv pointer.
* Add a new free_func field to the xua_layer_manager struct in order to
  be able to free it without knowing how it was allocated.
* Get rid og the loglevel param, LOGL_DEBUG was always passed and that
  was actually an implementation specific detail of the default xua
  layer manager.
* Pass pointer to function to be called by LM to submit primitives to
  M3UA.
Change-Id: Ia96ebf40444f46ad718d61befbecb523f267fd6c

Change-Id: I5b101d3afa41712d895815b467eae58f52922476
Pau Espin Pedrol at

#20294 (Feb 5, 2026, 12:58:29 PM)

Refactor xua_layer_manager object

Several changes to improve separation of the LM object and its
lifecycle:
* Store in ss7_asp a pointer to a xua_layer_manager, which contains all
  implementation dependent information inside its priv pointer.
* Add a new free_func field to the xua_layer_manager struct in order to
  be able to free it without knowing how it was allocated.
* Get rid og the loglevel param, LOGL_DEBUG was always passed and that
  was actually an implementation specific detail of the default xua
  layer manager.
* Pass pointer to function to be called by LM to submit primitives to
  M3UA.
Change-Id: Ia96ebf40444f46ad718d61befbecb523f267fd6c

Change-Id: I5b101d3afa41712d895815b467eae58f52922476
Pau Espin Pedrol at

#20293 (Feb 5, 2026, 12:04:30 PM)

vty: Allow configuring xua server in ASP mode

The xua server has nothing to do with a node being an ASP or an SG,
it used to allow transport server features (SCTP/TCP server).
One may want to configure an ASP role with a SCTCP server.

Change-Id: I9b07d2c96404b7b86c51fd9c7bab5e52a2343ade
Pau Espin Pedrol at

#20292 (Feb 5, 2026, 12:03:59 PM)

Refactor xua_layer_manager object

Several changes to improve separation of the LM object and its
lifecycle:
* Store in ss7_asp a pointer to a xua_layer_manager, which contains all
  implementation dependent information inside its priv pointer.
* Add a new free_func field to the xua_layer_manager struct in order to
  be able to free it without knowing how it was allocated.
* Get rid og the loglevel param, LOGL_DEBUG was always passed and that
  was actually an implementation specific detail of the default xua
  layer manager.
* get rid of struct lm_fsm_priv, it's not needed since it acutally only
  contain an asp pointer which can be passed directly as fi->priv.

Change-Id: Ia96ebf40444f46ad718d61befbecb523f267fd6c
Pau Espin Pedrol at

#20291 (Feb 5, 2026, 12:03:57 PM)

Document osmo_xua_layer_manager prim_cb

Change-Id: I1347c3538435985836ee5fe1d9dd42996e32ff94
Pau Espin Pedrol at

#20290 (Feb 5, 2026, 12:03:57 PM)

vty: Allow configuring xua timers in ASP mode

non-STP users of the API may also want to configure per-ASP timers, like
the Heartbeat timer.

Change-Id: I3801d10175f42c13e6f7994e1e4da8e7c99e8e16
Pau Espin Pedrol at

#20289 (Feb 5, 2026, 12:03:56 PM)

ss7_asp: remove lm during ASP destroy

Otherwise the xua_default_lm_fsm instance is freed with talloc_free()
instead of osmo_fsm_inst_free().

Change-Id: Iee339b49d4b73a9afde60c4b8f6f5a03ad8a822d
Pau Espin Pedrol at

#20288 (Feb 5, 2026, 12:03:55 PM)

Move osmo_xua_layer_manager definition to ss7_asp.h

The struct osmo_xua_layer_manager has no relation to a xua_server, hence
move it to ss7_asp.h, where it is used.

Change-Id: If7efb8996de0c407f5a466ff959095c8872ddc76
Pau Espin Pedrol at

#20287 (Feb 5, 2026, 12:03:55 PM)

Refactor xua_layer_manager object

Several changes to improve separation of the LM object and its
lifecycle:
* Store in ss7_asp a pointer to a xua_layer_manager, which contains all
  implementation dependent information inside its priv pointer.
* Add a new free_func field to the xua_layer_manager struct in order to
  be able to free it without knowing how it was allocated.
* Get rid og the loglevel param, LOGL_DEBUG was always passed and that
  was actually an implementation specific detail of the default xua
  layer manager.
* get rid of struct lm_fsm_priv, it's not needed since it acutally only
  contain an asp pointer which can be passed directly as fi->priv.

Change-Id: Ia96ebf40444f46ad718d61befbecb523f267fd6c
Pau Espin Pedrol at

#20286 (Feb 5, 2026, 12:03:54 PM)

ss7_asp: remove lm during ASP destroy

Otherwise the xua_default_lm_fsm instance is freed with talloc_free()
instead of osmo_fsm_inst_free().

Change-Id: Iee339b49d4b73a9afde60c4b8f6f5a03ad8a822d
Pau Espin Pedrol at

#20285 (Feb 5, 2026, 12:03:54 PM)

Document osmo_xua_layer_manager prim_cb

Change-Id: I1347c3538435985836ee5fe1d9dd42996e32ff94
Pau Espin Pedrol at

#20284 (Feb 5, 2026, 12:03:52 PM)

vty: Allow configuring xua server in ASP mode

The xua server has nothing to do with a node being an ASP or an SG,
it used to allow transport server features (SCTP/TCP server).
One may want to configure an ASP role with a SCTCP server.

Change-Id: I9b07d2c96404b7b86c51fd9c7bab5e52a2343ade
Pau Espin Pedrol at

#20283 (Feb 5, 2026, 12:03:52 PM)

vty: Allow configuring xua timers in ASP mode

non-STP users of the API may also want to configure per-ASP timers, like
the Heartbeat timer.

Change-Id: I3801d10175f42c13e6f7994e1e4da8e7c99e8e16
Pau Espin Pedrol at

#20282 (Feb 5, 2026, 12:03:50 PM)

Move osmo_xua_layer_manager definition to ss7_asp.h

The struct osmo_xua_layer_manager has no relation to a xua_server, hence
move it to ss7_asp.h, where it is used.

Change-Id: If7efb8996de0c407f5a466ff959095c8872ddc76
Pau Espin Pedrol at

#20281 (Feb 4, 2026, 3:20:40 PM)

Related: OS#6922

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.

Change-Id: I11c24b64f0e49cf80c825969dbf018b2948d855c
canghaiwuhen at

#20280 (Feb 4, 2026, 3:20:38 PM)

Related: OS#6922

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.

Change-Id: I11c24b64f0e49cf80c825969dbf018b2948d855c
canghaiwuhen at

#20279 (Feb 4, 2026, 1:26:11 PM)

vty: Allow configuring xua timers in ASP mode

non-STP users of the API may also want to configure per-ASP timers, like
the Heartbeat timer.

Change-Id: I3801d10175f42c13e6f7994e1e4da8e7c99e8e16
Pau Espin Pedrol at

#20278 (Feb 4, 2026, 1:26:09 PM)

vty: Allow configuring xua server in ASP mode

The xua server has nothing to do with a node being an ASP or an SG,
it used to allow transport server features (SCTP/TCP server).
One may want to configure an ASP role with a SCTCP server.

Change-Id: I9b07d2c96404b7b86c51fd9c7bab5e52a2343ade
Pau Espin Pedrol at

#20277 (Feb 4, 2026, 1:26:04 PM)

vty: Allow configuring xua timers in ASP mode

non-STP users of the API may also want to configure per-ASP timers, like
the Heartbeat timer.

Change-Id: I3801d10175f42c13e6f7994e1e4da8e7c99e8e16
Pau Espin Pedrol at

#20276 (Feb 4, 2026, 1:25:49 PM)

vty: Allow configuring xua server in ASP mode

The xua server has nothing to do with a node being an ASP or an SG,
it used to allow transport server features (SCTP/TCP server).
One may want to configure an ASP role with a SCTCP server.

Change-Id: I9b07d2c96404b7b86c51fd9c7bab5e52a2343ade
Pau Espin Pedrol at

#20275 (Feb 4, 2026, 12:50:28 PM)

osmo-bts-trx: apply 'max-initial' value before POWERON

Not applying this value before powering the transceiver on results
in transmission at full Tx power for a certain amount of time before
the power ramping begins.

Change-Id: Iff03d4dcb74f67629a59c8d6f8bb60929d9f6ddd
Related: OS#6939
Vadim Yanitskiy at

#20274 (Feb 4, 2026, 12:50:28 PM)

osmo-bts-trx: apply 'max-initial' value before POWERON

Not applying this value before powering the transceiver on results
in transmission at full Tx power for a certain amount of time before
the power ramping begins.

Change-Id: Iff03d4dcb74f67629a59c8d6f8bb60929d9f6ddd
Related: OS#6939
Vadim Yanitskiy at

#20273 (Feb 4, 2026, 12:31:28 PM)

osmo-bts-trx: trx_provision_fsm: mark internal functions as static

Change-Id: I0cf13e091938db2b991156189bf4ff7c523e24da
Vadim Yanitskiy at

#20272 (Feb 4, 2026, 12:31:24 PM)

osmo-bts-trx: apply 'max-initial' value before POWERON

Not applying this value before powering the transceiver on results
in transmission at full Tx power for a certain amount of time before
the power ramping begins.

Change-Id: Iff03d4dcb74f67629a59c8d6f8bb60929d9f6ddd
Related: OS#6939
Vadim Yanitskiy at

#20271 (Feb 4, 2026, 12:31:24 PM)

osmo-bts-trx: trx_provision_fsm: do not send *_CNF events on failure

The trx_provision_fsm currently does not check the event data (rc),
causing failed operations (rc != 0) to be treated as successful
confirmations.  Avoid emitting *_CNF events when a command fails,
ensuring that only successful operations generate confirmation events.

Change-Id: Id85fb19c6621f55a9c46882df24bec534864a9dc
Vadim Yanitskiy at

#20270 (Feb 4, 2026, 12:31:24 PM)

osmo-bts-trx: trx_provision_fsm: mark internal functions as static

Change-Id: I0cf13e091938db2b991156189bf4ff7c523e24da
Vadim Yanitskiy at

#20269 (Feb 4, 2026, 12:31:23 PM)

osmo-bts-trx: apply 'max-initial' value before POWERON

Not applying this value before powering the transceiver on results
in transmission at full Tx power for a certain amount of time before
the power ramping begins.

Change-Id: Iff03d4dcb74f67629a59c8d6f8bb60929d9f6ddd
Related: OS#6939
Vadim Yanitskiy at

#20268 (Feb 4, 2026, 12:31:22 PM)

osmo-bts-trx: trx_provision_fsm: do not send *_CNF events on failure

The trx_provision_fsm currently does not check the event data (rc),
causing failed operations (rc != 0) to be treated as successful
confirmations.  Avoid emitting *_CNF events when a command fails,
ensuring that only successful operations generate confirmation events.

Change-Id: Id85fb19c6621f55a9c46882df24bec534864a9dc
Vadim Yanitskiy at

#20267 (Feb 4, 2026, 12:04:29 PM)

cosmetic: xua_rkm: Improve description of adding ASP to AS

Change-Id: I57c6a810e081b0968cf2dc24357214a4cebe533b
Pau Espin Pedrol at

#20266 (Feb 4, 2026, 12:04:28 PM)

cosmetic: xua_rkm: Improve description of adding ASP to AS

Change-Id: I57c6a810e081b0968cf2dc24357214a4cebe533b
Pau Espin Pedrol at

#20265 (Feb 4, 2026, 12:03:08 PM)

cosmetic: xua_rkm: Improve description of adding ASP to AS

Change-Id: I57c6a810e081b0968cf2dc24357214a4cebe533b
Pau Espin Pedrol at

#20264 (Feb 4, 2026, 12:03:08 PM)

cosmetic: xua_rkm: Improve description of adding ASP to AS

Change-Id: I57c6a810e081b0968cf2dc24357214a4cebe533b
Pau Espin Pedrol at

#20263 (Feb 4, 2026, 11:37:28 AM)

tcap: Log vty msg in CS7_ROLE_SG

This code was placed in the wrong section, since tcap features can only
be enabled in SG mode (STP).

Change-Id: I77cf19bdc8fa29dd4a28773ac0f954850cd76e1b
Pau Espin Pedrol at

#20262 (Feb 4, 2026, 11:37:28 AM)

tcap: Log vty msg in CS7_ROLE_SG

This code was placed in the wrong section, since tcap features can only
be enabled in SG mode (STP).

Change-Id: I77cf19bdc8fa29dd4a28773ac0f954850cd76e1b
Pau Espin Pedrol at

#20261 (Feb 4, 2026, 11:31:38 AM)

cosmetic: Fix typo in comment

Change-Id: If5adb80baaae78cae7164e1f85c53195eafa6e3e
Pau Espin Pedrol at

#20260 (Feb 4, 2026, 11:31:34 AM)

cosmetic: Fix typo in comment

Change-Id: If5adb80baaae78cae7164e1f85c53195eafa6e3e
Pau Espin Pedrol at

#20259 (Feb 4, 2026, 11:15:05 AM)

Add Emscripten build support and JS callback logging backend

This change enables building libosmocore for sandboxed, non-POSIX
environments, specifically WebAssembly targets produced via the
Emscripten toolchain.

The broader motivation is to allow partial execution of selected
Osmocom components in isolated runtime environments where direct access
to hardware and traditional operating system facilities (filesystem,
sockets, privileged execution) is not available.

One intended use case is running a GSM 2G base station where the
radio-facing components are executed inside a web environment, while
the remaining Osmocom stack and core network components continue to run
unchanged on a conventional backend server. In this model, highly
stripped-down variants of osmo-bts and osmo-trx are built as static
WebAssembly libraries and executed in the browser, while depending on
core libraries such as libosmocore, libosmo-netif, and libosmo-abis.

A practical advantage of this approach is that no deployment or
privileged setup is required on the radio endpoint side. A user can
instantiate a radio endpoint with minimal configuration, while all
stateful logic and operational complexity remains centralized on the
backend. Multiple such radio endpoints may connect to the same backend
core network, effectively forming a single logical network from the
core network perspective, independent of the physical location of the
radio endpoints.

Existing libosmocore build logic and platform assumptions rely on the
availability of POSIX APIs and OS services which are not present in
WebAssembly runtimes. This currently prevents libosmocore from being
built for such targets without targeted, build-time adjustments. This
patch introduces the minimal set of changes required to enable such
builds, without affecting native platforms.

As part of this groundwork, a minimal callback-based logging hook is
introduced. When building for Emscripten, this hook allows forwarding
log messages to an external environment via a user-provided JavaScript
callback. This enables integration with browser-side logging or UI
infrastructure without introducing new logging backends or runtime
dependencies. For all other build targets, the hook resolves to a no-op
implementation and does not alter existing logging behavior.

No runtime behavior, protocol semantics, or network interactions are
changed by this patch. All modifications are strictly limited to
build-time and platform-specific code paths and are only active when
targeting Emscripten. Native builds and existing deployment scenarios
remain unaffected.

This patch is intended as groundwork. Follow-up changes, proposed
separately and incrementally, may extend similar support to other
Osmocom components such as libosmo-netif, libosmo-abis, osmo-bts, and
osmo-trx, while keeping all such changes optional and isolated from
native builds.

Change-Id: Ia8d5f4bb6570b5e055826f3a051e5e5896866e31
dtv.comp at

#20258 (Feb 4, 2026, 11:15:05 AM)

Add Emscripten build support and JS callback logging backend

This change enables building libosmocore for sandboxed, non-POSIX
environments, specifically WebAssembly targets produced via the
Emscripten toolchain.

The broader motivation is to allow partial execution of selected
Osmocom components in isolated runtime environments where direct access
to hardware and traditional operating system facilities (filesystem,
sockets, privileged execution) is not available.

One intended use case is running a GSM 2G base station where the
radio-facing components are executed inside a web environment, while
the remaining Osmocom stack and core network components continue to run
unchanged on a conventional backend server. In this model, highly
stripped-down variants of osmo-bts and osmo-trx are built as static
WebAssembly libraries and executed in the browser, while depending on
core libraries such as libosmocore, libosmo-netif, and libosmo-abis.

A practical advantage of this approach is that no deployment or
privileged setup is required on the radio endpoint side. A user can
instantiate a radio endpoint with minimal configuration, while all
stateful logic and operational complexity remains centralized on the
backend. Multiple such radio endpoints may connect to the same backend
core network, effectively forming a single logical network from the
core network perspective, independent of the physical location of the
radio endpoints.

Existing libosmocore build logic and platform assumptions rely on the
availability of POSIX APIs and OS services which are not present in
WebAssembly runtimes. This currently prevents libosmocore from being
built for such targets without targeted, build-time adjustments. This
patch introduces the minimal set of changes required to enable such
builds, without affecting native platforms.

As part of this groundwork, a minimal callback-based logging hook is
introduced. When building for Emscripten, this hook allows forwarding
log messages to an external environment via a user-provided JavaScript
callback. This enables integration with browser-side logging or UI
infrastructure without introducing new logging backends or runtime
dependencies. For all other build targets, the hook resolves to a no-op
implementation and does not alter existing logging behavior.

No runtime behavior, protocol semantics, or network interactions are
changed by this patch. All modifications are strictly limited to
build-time and platform-specific code paths and are only active when
targeting Emscripten. Native builds and existing deployment scenarios
remain unaffected.

This patch is intended as groundwork. Follow-up changes, proposed
separately and incrementally, may extend similar support to other
Osmocom components such as libosmo-netif, libosmo-abis, osmo-bts, and
osmo-trx, while keeping all such changes optional and isolated from
native builds.

Change-Id: Ia8d5f4bb6570b5e055826f3a051e5e5896866e31
dtv.comp at

#20257 (Feb 4, 2026, 11:15:03 AM)

Add Emscripten build support and JS callback logging backend

This change enables building libosmocore for sandboxed, non-POSIX
environments, specifically WebAssembly targets produced via the
Emscripten toolchain.

The broader motivation is to allow partial execution of selected
Osmocom components in isolated runtime environments where direct access
to hardware and traditional operating system facilities (filesystem,
sockets, privileged execution) is not available.

One intended use case is running a GSM 2G base station where the
radio-facing components are executed inside a web environment, while
the remaining Osmocom stack and core network components continue to run
unchanged on a conventional backend server. In this model, highly
stripped-down variants of osmo-bts and osmo-trx are built as static
WebAssembly libraries and executed in the browser, while depending on
core libraries such as libosmocore, libosmo-netif, and libosmo-abis.

A practical advantage of this approach is that no deployment or
privileged setup is required on the radio endpoint side. A user can
instantiate a radio endpoint with minimal configuration, while all
stateful logic and operational complexity remains centralized on the
backend. Multiple such radio endpoints may connect to the same backend
core network, effectively forming a single logical network from the
core network perspective, independent of the physical location of the
radio endpoints.

Existing libosmocore build logic and platform assumptions rely on the
availability of POSIX APIs and OS services which are not present in
WebAssembly runtimes. This currently prevents libosmocore from being
built for such targets without targeted, build-time adjustments. This
patch introduces the minimal set of changes required to enable such
builds, without affecting native platforms.

As part of this groundwork, a minimal callback-based logging hook is
introduced. When building for Emscripten, this hook allows forwarding
log messages to an external environment via a user-provided JavaScript
callback. This enables integration with browser-side logging or UI
infrastructure without introducing new logging backends or runtime
dependencies. For all other build targets, the hook resolves to a no-op
implementation and does not alter existing logging behavior.

No runtime behavior, protocol semantics, or network interactions are
changed by this patch. All modifications are strictly limited to
build-time and platform-specific code paths and are only active when
targeting Emscripten. Native builds and existing deployment scenarios
remain unaffected.

This patch is intended as groundwork. Follow-up changes, proposed
separately and incrementally, may extend similar support to other
Osmocom components such as libosmo-netif, libosmo-abis, osmo-bts, and
osmo-trx, while keeping all such changes optional and isolated from
native builds.

Change-Id: Ia8d5f4bb6570b5e055826f3a051e5e5896866e31
dtv.comp at

#20256 (Feb 4, 2026, 9:44:23 AM)

xua_rkm: Add checks for ASP role in rx msg path

Change-Id: I672060c24571586b37102c7f7f60e4b0e20e07a9
Pau Espin Pedrol at

#20255 (Feb 4, 2026, 9:44:22 AM)

xua_rkm: Add checks for ASP role in rx msg path

Change-Id: I672060c24571586b37102c7f7f60e4b0e20e07a9
Pau Espin Pedrol at

#20254 (Feb 4, 2026, 9:43:17 AM)

xua_rkm: Add checks for ASP role in rx msg path

Change-Id: I672060c24571586b37102c7f7f60e4b0e20e07a9
Pau Espin Pedrol at

#20253 (Feb 4, 2026, 9:43:12 AM)

xua_rkm: Add checks for ASP role in rx msg path

Change-Id: I672060c24571586b37102c7f7f60e4b0e20e07a9
Pau Espin Pedrol at

#20252 (Feb 4, 2026, 8:41:11 AM)

xua_asp_fsm: Remove duplicated role field

The role is actually taken from the asp object, and it's not expected to
change during its lifetime, so there's no really a need to keep a copy
of it. Simplify the code by using the asp role everywhere.

Change-Id: Ia6de131ce50f07261736645fe5b2ed1ad39eb01b
Pau Espin Pedrol at

#20251 (Feb 4, 2026, 8:41:10 AM)

xua_asp_fsm: Remove duplicated role field

The role is actually taken from the asp object, and it's not expected to
change during its lifetime, so there's no really a need to keep a copy
of it. Simplify the code by using the asp role everywhere.

Change-Id: Ia6de131ce50f07261736645fe5b2ed1ad39eb01b
Pau Espin Pedrol at

#20250 (Feb 4, 2026, 7:20:25 AM)

Fix typos

Change-Id: I107154f0cc7c240ea143397a5f7b655cc48ee9b8
matan1008 at

#20249 (Feb 4, 2026, 7:20:24 AM)

smscb_peer_fsm: Replace printf with debug log

Change-Id: I026da3797a025d79f500f742e97139fbc5bbbcad
matan1008 at

#20248 (Feb 4, 2026, 7:20:19 AM)

sbcap: Remove duplicated cli connection destroy

Change-Id: I8809738955fb90e546b2adb8bb0722b15f464d26
matan1008 at

#20247 (Feb 4, 2026, 7:20:18 AM)

Fix typos

Change-Id: I107154f0cc7c240ea143397a5f7b655cc48ee9b8
matan1008 at

#20246 (Feb 4, 2026, 7:20:18 AM)

sbcap: Remove duplicated cli connection destroy

Change-Id: I8809738955fb90e546b2adb8bb0722b15f464d26
matan1008 at

#20245 (Feb 4, 2026, 7:20:18 AM)

smscb_peer_fsm: Replace printf with debug log

Change-Id: I026da3797a025d79f500f742e97139fbc5bbbcad
matan1008 at

#20244 (Feb 3, 2026, 9:23:26 PM)

doc: fix default 'max-initial' value

The default value is set in gsm_bts_trx_alloc() and it's actually 0.

Change-Id: I178e0664f6818d0eda15701b57bb030916b06006
Vadim Yanitskiy at

#20243 (Feb 3, 2026, 9:23:26 PM)

osmo-bts-trx: add missing \n to a logging message

Change-Id: I5b3091b5ed96e28ae056272398c5eddbdef4b8b5
Vadim Yanitskiy at

#20242 (Feb 3, 2026, 9:23:24 PM)

osmo-bts-trx: apply 'max-initial' value before POWERON

Not applying this value before powering the transceiver on results
in transmission at full Tx power for a certain amount of time before
the power ramping begins.

Change-Id: Iff03d4dcb74f67629a59c8d6f8bb60929d9f6ddd
Related: OS#6939
Vadim Yanitskiy at

#20241 (Feb 3, 2026, 9:23:20 PM)

osmo-bts-trx: add missing \n to a logging message

Change-Id: I5b3091b5ed96e28ae056272398c5eddbdef4b8b5
Vadim Yanitskiy at

#20240 (Feb 3, 2026, 9:23:20 PM)

doc: fix default 'max-initial' value

The default value is set in gsm_bts_trx_alloc() and it's actually 0.

Change-Id: I178e0664f6818d0eda15701b57bb030916b06006
Vadim Yanitskiy at

#20239 (Feb 3, 2026, 9:23:19 PM)

osmo-bts-trx: apply 'max-initial' value before POWERON

Not applying this value before powering the transceiver on results
in transmission at full Tx power for a certain amount of time before
the power ramping begins.

Change-Id: Iff03d4dcb74f67629a59c8d6f8bb60929d9f6ddd
Related: OS#6939
Vadim Yanitskiy at

#20238 (Feb 3, 2026, 7:19:19 PM)

Add Emscripten build support and JS callback logging backend

This change enables building libosmocore for sandboxed, non-POSIX
environments, specifically WebAssembly targets produced via the
Emscripten toolchain.

The broader motivation is to allow partial execution of selected
Osmocom components in isolated runtime environments where direct access
to hardware and traditional operating system facilities (filesystem,
sockets, privileged execution) is not available.

One intended use case is running a GSM 2G base station where the
radio-facing components are executed inside a web environment, while
the remaining Osmocom stack and core network components continue to run
unchanged on a conventional backend server. In this model, highly
stripped-down variants of osmo-bts and osmo-trx are built as static
WebAssembly libraries and executed in the browser, while depending on
core libraries such as libosmocore, libosmo-netif, and libosmo-abis.

A practical advantage of this approach is that no deployment or
privileged setup is required on the radio endpoint side. A user can
instantiate a radio endpoint with minimal configuration, while all
stateful logic and operational complexity remains centralized on the
backend. Multiple such radio endpoints may connect to the same backend
core network, effectively forming a single logical network from the
core network perspective, independent of the physical location of the
radio endpoints.

Existing libosmocore build logic and platform assumptions rely on the
availability of POSIX APIs and OS services which are not present in
WebAssembly runtimes. This currently prevents libosmocore from being
built for such targets without targeted, build-time adjustments. This
patch introduces the minimal set of changes required to enable such
builds, without affecting native platforms.

As part of this groundwork, a minimal callback-based logging hook is
introduced. When building for Emscripten, this hook allows forwarding
log messages to an external environment via a user-provided JavaScript
callback. This enables integration with browser-side logging or UI
infrastructure without introducing new logging backends or runtime
dependencies. For all other build targets, the hook resolves to a no-op
implementation and does not alter existing logging behavior.

No runtime behavior, protocol semantics, or network interactions are
changed by this patch. All modifications are strictly limited to
build-time and platform-specific code paths and are only active when
targeting Emscripten. Native builds and existing deployment scenarios
remain unaffected.

This patch is intended as groundwork. Follow-up changes, proposed
separately and incrementally, may extend similar support to other
Osmocom components such as libosmo-netif, libosmo-abis, osmo-bts, and
osmo-trx, while keeping all such changes optional and isolated from
native builds.

Change-Id: Ia8d5f4bb6570b5e055826f3a051e5e5896866e31
dtv.comp at

#20237 (Feb 3, 2026, 7:19:19 PM)

Add Emscripten build support and JS callback logging backend

This change enables building libosmocore for sandboxed, non-POSIX
environments, specifically WebAssembly targets produced via the
Emscripten toolchain.

The broader motivation is to allow partial execution of selected
Osmocom components in isolated runtime environments where direct access
to hardware and traditional operating system facilities (filesystem,
sockets, privileged execution) is not available.

One intended use case is running a GSM 2G base station where the
radio-facing components are executed inside a web environment, while
the remaining Osmocom stack and core network components continue to run
unchanged on a conventional backend server. In this model, highly
stripped-down variants of osmo-bts and osmo-trx are built as static
WebAssembly libraries and executed in the browser, while depending on
core libraries such as libosmocore, libosmo-netif, and libosmo-abis.

A practical advantage of this approach is that no deployment or
privileged setup is required on the radio endpoint side. A user can
instantiate a radio endpoint with minimal configuration, while all
stateful logic and operational complexity remains centralized on the
backend. Multiple such radio endpoints may connect to the same backend
core network, effectively forming a single logical network from the
core network perspective, independent of the physical location of the
radio endpoints.

Existing libosmocore build logic and platform assumptions rely on the
availability of POSIX APIs and OS services which are not present in
WebAssembly runtimes. This currently prevents libosmocore from being
built for such targets without targeted, build-time adjustments. This
patch introduces the minimal set of changes required to enable such
builds, without affecting native platforms.

As part of this groundwork, a minimal callback-based logging hook is
introduced. When building for Emscripten, this hook allows forwarding
log messages to an external environment via a user-provided JavaScript
callback. This enables integration with browser-side logging or UI
infrastructure without introducing new logging backends or runtime
dependencies. For all other build targets, the hook resolves to a no-op
implementation and does not alter existing logging behavior.

No runtime behavior, protocol semantics, or network interactions are
changed by this patch. All modifications are strictly limited to
build-time and platform-specific code paths and are only active when
targeting Emscripten. Native builds and existing deployment scenarios
remain unaffected.

This patch is intended as groundwork. Follow-up changes, proposed
separately and incrementally, may extend similar support to other
Osmocom components such as libosmo-netif, libosmo-abis, osmo-bts, and
osmo-trx, while keeping all such changes optional and isolated from
native builds.

Change-Id: Ia8d5f4bb6570b5e055826f3a051e5e5896866e31
dtv.comp at

#20236 (Feb 3, 2026, 7:19:14 PM)

Add Emscripten build support and JS callback logging backend

This change enables building libosmocore for sandboxed, non-POSIX
environments, specifically WebAssembly targets produced via the
Emscripten toolchain.

The broader motivation is to allow partial execution of selected
Osmocom components in isolated runtime environments where direct access
to hardware and traditional operating system facilities (filesystem,
sockets, privileged execution) is not available.

One intended use case is running a GSM 2G base station where the
radio-facing components are executed inside a web environment, while
the remaining Osmocom stack and core network components continue to run
unchanged on a conventional backend server. In this model, highly
stripped-down variants of osmo-bts and osmo-trx are built as static
WebAssembly libraries and executed in the browser, while depending on
core libraries such as libosmocore, libosmo-netif, and libosmo-abis.

A practical advantage of this approach is that no deployment or
privileged setup is required on the radio endpoint side. A user can
instantiate a radio endpoint with minimal configuration, while all
stateful logic and operational complexity remains centralized on the
backend. Multiple such radio endpoints may connect to the same backend
core network, effectively forming a single logical network from the
core network perspective, independent of the physical location of the
radio endpoints.

Existing libosmocore build logic and platform assumptions rely on the
availability of POSIX APIs and OS services which are not present in
WebAssembly runtimes. This currently prevents libosmocore from being
built for such targets without targeted, build-time adjustments. This
patch introduces the minimal set of changes required to enable such
builds, without affecting native platforms.

As part of this groundwork, a minimal callback-based logging hook is
introduced. When building for Emscripten, this hook allows forwarding
log messages to an external environment via a user-provided JavaScript
callback. This enables integration with browser-side logging or UI
infrastructure without introducing new logging backends or runtime
dependencies. For all other build targets, the hook resolves to a no-op
implementation and does not alter existing logging behavior.

No runtime behavior, protocol semantics, or network interactions are
changed by this patch. All modifications are strictly limited to
build-time and platform-specific code paths and are only active when
targeting Emscripten. Native builds and existing deployment scenarios
remain unaffected.

This patch is intended as groundwork. Follow-up changes, proposed
separately and incrementally, may extend similar support to other
Osmocom components such as libosmo-netif, libosmo-abis, osmo-bts, and
osmo-trx, while keeping all such changes optional and isolated from
native builds.

Change-Id: Ia8d5f4bb6570b5e055826f3a051e5e5896866e31
dtv.comp at

#20235 (Feb 3, 2026, 4:44:54 PM)

cosmetic: xua_as_fsm.c: Improve spec documentation

The specific spec paragraph talks about "Alternate ASP_Active"
scenario in quotes, which I could find right away by grepping
in the code. Improve the documentation so it can be easily matched in
code.

Change-Id: I79f5123d87dab79620657c2a2ebfd9fe22f178c3
Pau Espin Pedrol at

#20234 (Feb 3, 2026, 4:44:52 PM)

cosmetic: xua_as_fsm.c: Improve spec documentation

The specific spec paragraph talks about "Alternate ASP_Active"
scenario in quotes, which I could find right away by grepping
in the code. Improve the documentation so it can be easily matched in
code.

Change-Id: I79f5123d87dab79620657c2a2ebfd9fe22f178c3
Pau Espin Pedrol at

#20233 (Feb 3, 2026, 4:43:26 PM)

vty: Prohibit configuring an ASP as IPSP in an SG node

The spec explicitly prohibits it.

Change-Id: I38bbd9226bad478f8068d02f7a4d7b3711596208
Pau Espin Pedrol at

#20232 (Feb 3, 2026, 4:43:25 PM)

cosmetic: xua_as_fsm.c: Improve spec documentation

The specific spec paragraph talks about "Alternate ASP_Active"
scenario in quotes, which I could find right away by grepping
in the code. Improve the documentation so it can be easily matched in
code.

Change-Id: I79f5123d87dab79620657c2a2ebfd9fe22f178c3
Pau Espin Pedrol at

#20231 (Feb 3, 2026, 4:43:24 PM)

IPSP: Allow vty-configuration of IPSP role "ASPs"

We should now have everything in place to support IPSP-SE, let's
accept enabling IPSP role via the VTY.

Change-Id: I0f0fa881471b87a4bb82a0211c6fb6e4c50b48ec
Pau Espin Pedrol at

#20230 (Feb 3, 2026, 4:42:33 PM)

m3ua: Allow rx SCON in IPSP role

Change-Id: I49838219aab912243a761ab9b5167095e363c72b
Pau Espin Pedrol at

#20229 (Feb 3, 2026, 4:42:23 PM)

IPSP: don't route any incoming M3UA messages in IPSP case

An IPSP is a point-to-point association, and we must not route any
such messages.

Change-Id: Iad7280619ec5814cda7a179418079048a5955976
Pau Espin Pedrol at

#20228 (Feb 3, 2026, 4:42:22 PM)

IPSP: Add a comment that it's intentional to drop all M3UA SNM for IPSP

An IPSP doesn't have MTP3 network management.

Change-Id: I7b87bf03964e7e9aac683ad860e511f83a685821
Pau Espin Pedrol at

#20227 (Feb 3, 2026, 4:42:20 PM)

vty: Prohibit configuring an ASP as IPSP in an SG node

The spec explicitly prohibits it.

Change-Id: I38bbd9226bad478f8068d02f7a4d7b3711596208
Pau Espin Pedrol at

#20226 (Feb 3, 2026, 4:42:20 PM)

IPSP: Allow vty-configuration of IPSP role "ASPs"

We should now have everything in place to support IPSP-SE, let's
accept enabling IPSP role via the VTY.

Change-Id: I0f0fa881471b87a4bb82a0211c6fb6e4c50b48ec
Pau Espin Pedrol at

#20225 (Feb 3, 2026, 4:42:20 PM)

cosmetic: xua_as_fsm.c: Improve spec documentation

The specific spec paragraph talks about "Alternate ASP_Active"
scenario in quotes, which I could find right away by grepping
in the code. Improve the documentation so it can be easily matched in
code.

Change-Id: I79f5123d87dab79620657c2a2ebfd9fe22f178c3
Pau Espin Pedrol at

#20224 (Feb 3, 2026, 4:42:20 PM)

m3ua: Allow rx SCON in IPSP role

Change-Id: I49838219aab912243a761ab9b5167095e363c72b
Pau Espin Pedrol at

#20223 (Feb 3, 2026, 4:42:19 PM)

IPSP: don't route any incoming M3UA messages in IPSP case

An IPSP is a point-to-point association, and we must not route any
such messages.

Change-Id: Iad7280619ec5814cda7a179418079048a5955976
Pau Espin Pedrol at

#20222 (Feb 3, 2026, 4:42:19 PM)

IPSP: Add a comment that it's intentional to drop all M3UA SNM for IPSP

An IPSP doesn't have MTP3 network management.

Change-Id: I7b87bf03964e7e9aac683ad860e511f83a685821
Pau Espin Pedrol at

#20221 (Feb 3, 2026, 10:33:53 AM)

osmo-hlr: Force log stderr blocking-io in --db-check mode

When --db-check is used, osmo-hlr actually becomes a synchronous
non-interactive program instead of a daemon.
In that case, we want to use blocking-io since it doesn't use the event
loop, so we want to flush all logging synchronously before exiting.

Usually the user will pass the same osmo-hlr.cfg when running with
--db-check, which means most probably won't be using blocking-io (as
expected when osmo-hlr runs in daemon mode).
Since --db-check converts osmo-hlr to a cmdline which exits after checks
are done, we actually want to force blocking-io in that case, so that
all content is written to stderr before finishing the process.

Change-Id: If5e505383086cc55d724c0d6891756c8d94fa267
Pau Espin Pedrol at

#20220 (Feb 3, 2026, 10:33:53 AM)

osmo-hlr: Force log stderr blocking-io in --db-check mode

When --db-check is used, osmo-hlr actually becomes a synchronous
non-interactive program instead of a daemon.
In that case, we want to use blocking-io since it doesn't use the event
loop, so we want to flush all logging synchronously before exiting.

Usually the user will pass the same osmo-hlr.cfg when running with
--db-check, which means most probably won't be using blocking-io (as
expected when osmo-hlr runs in daemon mode).
Since --db-check converts osmo-hlr to a cmdline which exits after checks
are done, we actually want to force blocking-io in that case, so that
all content is written to stderr before finishing the process.

Change-Id: If5e505383086cc55d724c0d6891756c8d94fa267
Pau Espin Pedrol at

#20219 (Feb 3, 2026, 10:30:48 AM)

osmo-hlr: Force log stderr blocking-io in --db-check mode

When --db-check is used, osmo-hlr actually becomes a synchronous
non-interactive program instead of a daemon.
In that case, we want to use blocking-io since it doesn't use the event
loop, so we want to flush all logging synchronously before exiting.

Usually the user will pass the same osmo-hlr.cfg when running with
--db-check, which means most probably won't be using blocking-io (as
expected when osmo-hlr runs in daemon mode).
Since --db-check converts osmo-hlr to a cmdline which exits after checks
are done, we actually want to force blocking-io in that case, so that
all content is written to stderr before finishing the process.

Change-Id: If5e505383086cc55d724c0d6891756c8d94fa267
Pau Espin Pedrol at

#20218 (Feb 3, 2026, 10:30:47 AM)

osmo-hlr: Force log stderr blocking-io in --db-check mode

When --db-check is used, osmo-hlr actually becomes a synchronous
non-interactive program instead of a daemon.
In that case, we want to use blocking-io since it doesn't use the event
loop, so we want to flush all logging synchronously before exiting.

Usually the user will pass the same osmo-hlr.cfg when running with
--db-check, which means most probably won't be using blocking-io (as
expected when osmo-hlr runs in daemon mode).
Since --db-check converts osmo-hlr to a cmdline which exits after checks
are done, we actually want to force blocking-io in that case, so that
all content is written to stderr before finishing the process.

Change-Id: If5e505383086cc55d724c0d6891756c8d94fa267
Pau Espin Pedrol at

#20217 (Feb 3, 2026, 10:19:55 AM)

tests/db_upgrade: Use log stderr blocking-io

When --db-check is used, osmo-hlr actually becomes a synchronous
non-interactive program instead of a daemon.
In that case, we want to use blocking-io since it doesn't use the event
loop, so we want to flush all logging synchrnously before exiting.

Change-Id: Ic81eacbcc0432b81debc52c49fddc668c7a062b3
Pau Espin Pedrol at

#20216 (Feb 3, 2026, 10:19:54 AM)

tests/db_upgrade: Use log stderr blocking-io

When --db-check is used, osmo-hlr actually becomes a synchronous
non-interactive program instead of a daemon.
In that case, we want to use blocking-io since it doesn't use the event
loop, so we want to flush all logging synchrnously before exiting.

Change-Id: Ic81eacbcc0432b81debc52c49fddc668c7a062b3
Pau Espin Pedrol at

#20215 (Feb 3, 2026, 10:12:43 AM)

tests/db_upgrade: Use log stderr blocking-io

When --db-check is used, osmo-hlr actually becomes a synchronous
non-interactive program instead of a daemon.
In that case, we want to use blocking-io since it doesn't use the event
loop, so we want to flush all logging synchrnously before exiting.

Change-Id: Ic81eacbcc0432b81debc52c49fddc668c7a062b3
Pau Espin Pedrol at

#20214 (Feb 3, 2026, 10:12:43 AM)

osmo-hlr: Force log stderr blocking-io in --db-check mode

When --db-check is used, osmo-hlr actually becomes a synchronous
non-interactive program instead of a daemon.
In that case, we want to use blocking-io since it doesn't use the event
loop, so we want to flush all logging synchronously before exiting.

Usually the user will pass the same osmo-hlr.cfg when running with
--db-check, which means most probably won't be using blocking-io (as
expected when osmo-hlr runs in daemon mode).
Since --db-check converts osmo-hlr to a cmdline which exits after checks
are done, we actually want to force blocking-io in that case, so that
all content is written to stderr before finishing the process.

Change-Id: If5e505383086cc55d724c0d6891756c8d94fa267
Pau Espin Pedrol at

#20213 (Feb 3, 2026, 10:12:39 AM)

tests/db_upgrade: Use log stderr blocking-io

When --db-check is used, osmo-hlr actually becomes a synchronous
non-interactive program instead of a daemon.
In that case, we want to use blocking-io since it doesn't use the event
loop, so we want to flush all logging synchrnously before exiting.

Change-Id: Ic81eacbcc0432b81debc52c49fddc668c7a062b3
Pau Espin Pedrol at

#20212 (Feb 3, 2026, 10:12:39 AM)

osmo-hlr: Force log stderr blocking-io in --db-check mode

When --db-check is used, osmo-hlr actually becomes a synchronous
non-interactive program instead of a daemon.
In that case, we want to use blocking-io since it doesn't use the event
loop, so we want to flush all logging synchronously before exiting.

Usually the user will pass the same osmo-hlr.cfg when running with
--db-check, which means most probably won't be using blocking-io (as
expected when osmo-hlr runs in daemon mode).
Since --db-check converts osmo-hlr to a cmdline which exits after checks
are done, we actually want to force blocking-io in that case, so that
all content is written to stderr before finishing the process.

Change-Id: If5e505383086cc55d724c0d6891756c8d94fa267
Pau Espin Pedrol at