Skip to content

Loading builds...

Changes

#27069 (Feb 23, 2026, 8:14:52 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

#27068 (Feb 23, 2026, 7:56:30 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

#27067 (Feb 23, 2026, 7:56:25 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

#27066 (Feb 23, 2026, 7:53:39 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

#27065 (Feb 23, 2026, 5:00:34 PM)

contrib/smpp-ota-tool: add missing usage helpstrings

Change-Id: Ic1521ba11b405f311a30fdb3585ad518375669ae
Related: OS#6868
pmaier@sysmocom.de at

#27064 (Feb 23, 2026, 3:56:40 PM)

tests/pySim-smpp2sim_test: add testcases for AES128 and AES256

Extend the existing test script so that it can handle multiple
testcases. Also add support for switching eUICC profiles.
Finally, add a testcases to test OTA-SMS (RFM) with AES128 and
AES256 encryption.

Change-Id: I1f10504f3a29a8c74a17991632d932819fecfa5a
Related: OS#6868
pmaier@sysmocom.de at

#27063 (Feb 23, 2026, 3:37:58 PM)

personalization: fix SdKey.apply_val() implementation

'securityDomain' elements are decoded to ProfileElementSD instances,
which keep higher level representations of the key data apart from the
decoded[] lists.

So far, apply_val() was dropping binary values in decoded[], which does
not work, because ProfileElementSD._pre_encode() overwrites
self.decoded[] from the higher level representation.

Implement using
- ProfileElementSD.find_key() and SecurityDomainKeyComponent to modify
  an exsiting entry, or
- ProfileElementSD.add_key() to create a new entry.

Before this patch, SdKey parameters seemed to patch PES successfully,
but their modifications did not end up in the encoded DER.

(BTW, this does not fix any other errors that may still be present in
the various SdKey subclasses, patches coming up.)

Related: SYS#6768
Change-Id: I07dfc378705eba1318e9e8652796cbde106c6a52
Neels Hofmeyr at

#27062 (Feb 23, 2026, 3:37:55 PM)

personalization: make AlgorithmID a new EnumParam

The AlgorithmID has a few preset values, and hardly anyone knows which
is which. So instead of entering '1', '2' or '3', make it work with
prededined values 'Milenage', 'TUAK' and 'usim-test'.

Implement the enum value part abstractly in new EnumParam.

Make AlgorithmID a subclass of EnumParam and define the values as from
pySim/esim/asn1/saip/PE_Definitions-3.3.1.asn

Related: SYS#6768
Change-Id: I71c2ec1b753c66cb577436944634f32792353240
Neels Hofmeyr at

#27061 (Feb 23, 2026, 3:37:53 PM)

personalization: implement reading back values from a PES

Implement get_values_from_pes(), the reverse direction of apply_val():
read back and return values from a ProfileElementSequence. Implement for
all ConfigurableParameter subclasses.

Future: SdKey.get_values_from_pes() is reading pe.decoded[], which works
fine, but I07dfc378705eba1318e9e8652796cbde106c6a52 will change this
implementation to use the higher level ProfileElementSD members.

Implementation detail:

Implement get_values_from_pes() as classmethod that returns a generator.
Subclasses should yield all occurences of their parameter in a given
PES.

For example, the ICCID can appear in multiple places.
Iccid.get_values_from_pes() yields all of the individual values. A set()
of the results quickly tells whether the PES is consistent.

Rationales for reading back values:

This allows auditing an eSIM profile, particularly for producing an
output.csv from a batch personalization (that generated lots of random
key material which now needs to be fed to an HLR...).

Reading back from a binary result is more reliable than storing the
values that were fed into a personalization.
By auditing final DER results with this code, I discovered:
- "oh, there already was some key material in my UPP template."
- "all IMSIs ended up the same, forgot to set up the parameter."
- the SdKey.apply() implementations currently don't work, see
  I07dfc378705eba1318e9e8652796cbde106c6a52 for a fix.

Change-Id: I234fc4317f0bdc1a486f0cee4fa432c1dce9b463
Neels Hofmeyr at

#27060 (Feb 23, 2026, 3:37:51 PM)

personalization: add get_typical_input_len() to ConfigurableParameter

The aim is to tell a user interface how wide an input text field should
be chosen to be convenient -- ideally showing the entire value in all
cases, but not too huge for fields that have no sane size limit.

Change-Id: I2568a032167a10517d4d75d8076a747be6e21890
Neels Hofmeyr at

#27059 (Feb 23, 2026, 3:37:48 PM)

personalization: indicate default ParamSource per ConfigurableParameter

Add default_source class members pointing to ParamSource classes to all
ConfigurableParameter subclasses.

This is useful to automatically set up a default ParamSource for a given
ConfigurableParameter subclass, during user interaction to produce a
batch personalization.

For example, if the user selects a Pin1 parameter, a calling program can
implicitly set this to a RandomDigitSource, which will magically make it
work the way that most users need.

BTW, default_source and default_value can be combined to configure a
matching ParamSource instance:

  my_source = MyParam.default_source.from_str( MyParam.default_value )

Change-Id: Ie58d13bce3fa1aa2547cf3cee918c2f5b30a8b32
Neels Hofmeyr at

#27058 (Feb 23, 2026, 3:37:46 PM)

personalization: add param_source.py, add batch.py

Implement pySim.esim.saip.batch.BatchPersonalization,
generating N eSIM profiles from a preset configuration.

Batch parameters can be fed by a constant, incrementing, random or from
CSV rows: add pySim.esim.saip.param_source.* classes to feed such input
to each of the BatchPersonalization's ConfigurableParameter instances.

Related: SYS#6768
Change-Id: I497c60c101ea0eea980e8b1a4b1f36c0eda39002

rather move BatchPersonalization to separate module

Change-Id: I01ae40a06605eb205bfb409189fcd2b3a128855a
Neels Hofmeyr at

#27057 (Feb 23, 2026, 3:37:43 PM)

personalization: allow reading back multiple values from PES

Change-Id: Iecb68af7c216c6b9dc3add469564416b6f37f7b2
Neels Hofmeyr at

#27056 (Feb 23, 2026, 3:37:40 PM)

MilenageRotationConstants: set example_input to 3GPP default

Change-Id: I36a9434b2f96d26d710f489d5afce1f0ef05bba1
Neels Hofmeyr at

#27055 (Feb 23, 2026, 1:56:42 PM)

contrib/smpp-ota-tool: warn about mixed up KIC/KIC indexes

Cards usually have multiple sets of KIC, KID (and KIK). The keys
are selected through an index. However, mixing keys from different
sets is concidered as a security violation and cards should reject
such configurations.

Let's print a warning to make users aware that something is off.

Change-Id: Ieb4e14145baba1c2cb4a237b612b04694940f402
Related: OS#6868
pmaier@sysmocom.de at

#27054 (Feb 23, 2026, 1:56:40 PM)

contrib/smpp-ota-tool/cosmetic: use lazy formatting for logging

Change-Id: I2540472a50b7a49b5a67d088cbdd4a2228eef8f4
Related: OS#6868
pmaier@sysmocom.de at

#27053 (Feb 23, 2026, 1:56:37 PM)

contrib/smpp-ota-tool: use correct kid index

(normally KID index and KIC index should be the same since mixing keys
is a concidered as a security violation. However, in this tool we
want to allow users to specify different indexes for KIC and KIC so that
they can make tests to make sure their cards correctly reject mixed up
key indexes)

Change-Id: I8847ccc39e4779971187e7877b8902fca7f8bfc1
Related: OS#6868
pmaier@sysmocom.de at

#27052 (Feb 23, 2026, 1:56:35 PM)

contrib/smpp-ota-tool/cosmetic: fix sourcecode formatting

Change-Id: Icbce41ffac097d2ef8714bc8963536ba54a77db2
Related: OS#6868
pmaier@sysmocom.de at

#27051 (Feb 23, 2026, 1:56:30 PM)

contrib/smpp-ota-tool: add missing usage helpstrings

Change-Id: Ic1521ba11b405f311a30fdb3585ad518375669ae
Related: OS#6868
pmaier@sysmocom.de at

#27050 (Feb 23, 2026, 1:56:26 PM)

tests/pySim-smpp2sim_test: add testcases for AES128 and AES256

Extend the existing test script so that it can handle multiple
testcases. Also add support for switching eUICC profiles.
Finally, add a testcases to test OTA-SMS (RFM) with AES128 and
AES256 encryption.

Change-Id: I1f10504f3a29a8c74a17991632d932819fecfa5a
Related: OS#6868
pmaier@sysmocom.de at

#27049 (Feb 23, 2026, 1:56:23 PM)

contrib/smpp-ota-tool: fix boolean commandline parameters

Boolean parameters should be false by default and use store_true when
set.

Change-Id: I0652b48d2ea5efbaaf5bc147aa8cef7ab8b0861d
Related: OS#6868
pmaier@sysmocom.de at

#27048 (Feb 23, 2026, 1:35:11 PM)

hnbgw: Fix race conditions during PFCP Association

Since osmo-hnbgw now sends Heartbeat Requests, we need to take that into
account.
Furthermore, since it also now supports retriggering association when
detecting peer restarted upon rx of Heartbeat Req, use that to trigger
an association to clean up state and have a deterministic way to
synchronize at that point regarding state.

Change-Id: If62bd6c6e4d6cf73791029172d3d8880629f36a8
Pau Espin Pedrol at

#27047 (Feb 23, 2026, 1:35:08 PM)

hnbgw: Introduce test TC_pfcp_heartbeat_recovery_timestamp

Related: SYS#7294
Change-Id: I3f8098d7a34666961437fecc5100422a5e7436a4
Pau Espin Pedrol at

#27046 (Feb 23, 2026, 1:35:02 PM)

hnbgw: introduce test TC_pfcp_heartbeat_timeout

Related: SYS#7294
Change-Id: I1e0b50bc19e1fa1240274baea1e7fedd1265ffcb
Pau Espin Pedrol at

#27045 (Feb 23, 2026, 11:35:26 AM)

dfu: do not reset itself

In theory USB_DFU_ATTRIBUTES_WILL_DETACH is nice, in practice
not so much, because usb uses control transfers and "waiting" for
status response completion after finishing flashing is cumbersome.
There is basically no advantage if the device resets itself, and
just waiting for the host to do it like most DFU devices work
(and what the BL used to do in the beginning) works
around the status issue.

Change-Id: I1b9e48470083597640918a8a1126922b31150153
ewild at

#27044 (Feb 23, 2026, 10:45:15 AM)

BSSAP_LE_Emulation: Increase timeout in f_bssap_le_wait_sccp_peer_available()

It was spotted in SMLC_Tests.ttcn that the current timeout may be too
short, and the test fails because ttcn3 connects to STP and receives a
DUNA, and then the IUT (osmo-smlc) connects to STP around 4 seconds
later, which is too late with existing timeout.

Change-Id: I2d4210bf5785a09bf384a1534c407dcf63b1c38b
Pau Espin Pedrol at

#27043 (Feb 23, 2026, 10:02:36 AM)

dfu: make resp buffer static

USB dma uses a buffer depending on alignment, so this can be safe,
but it should not be depend on reading and knowing the asf source code...

Change-Id: I2f9336143190350817e6352b00751b35b1600b62
ewild at

#27042 (Feb 23, 2026, 10:02:33 AM)

dfu: fix bState transition/reporting order as per dfu spec

DFU spec wants the next state, not the current one.

Change-Id: I06519c73cdb0b082002632da9cfe7436c63f52b0
ewild at

#27041 (Feb 23, 2026, 10:02:30 AM)

dfu: do not reset itself

In theory USB_DFU_ATTRIBUTES_WILL_DETACH is nice, in practice
not so much, because usb uses control transfers and "waiting" for
status response completion after finishing flashing is cumbersome.
There is basically no advantage if the device resets itself, and
just waiting for the host to do it like most DFU devices work
(and what the BL used to do in the beginning) works
around the status issue.

Change-Id: I1b9e48470083597640918a8a1126922b31150153
ewild at

#27040 (Feb 23, 2026, 1:38:28 AM)

main: rework panic handler

When an OSMO_ASSERT() fails it will call the osmo panic handler.
Previous it will always calls into a breakpoint which will require
a power-cycle.

Change the default (for production) to use a system reset.
But still allow calling into breakpoint by setting `break_on_panic` via SWD.

Change-Id: I91c732001e848ec5509bf81af8aac1a2a80eb718
lynxis at

#27039 (Feb 22, 2026, 8:45:45 PM)

dfu: usb_dfu() convert if() intos switch/case

Improves the overview of the handled states.
No functional change.

Change-Id: Ie0abcdb51612598e77cacf7772276919ded17d5a
lynxis at

#27038 (Feb 22, 2026, 8:45:39 PM)

dfu: MANIFEST_SYNC: stay in MANIFEST_SYNC when manifestationIntolerant & completed

In theory a device which is manifestintolerant and completed the manifestation should
not reach MANIFEST_SYNC again.

Remove the state transistion to WAIT-RESET and stay in the current state and
wait for the main loop to change the state is safer.

Change-Id: I8c34a18e2336731126a8c01070d86e2547578e3d
lynxis at

#27037 (Feb 22, 2026, 8:45:33 PM)

dfu: mainloop: work on a local copy of dfu_state

Prevent race conditions between main loop and irq.
Copy at the start of the loop the dfu state and work on it.

Change-Id: Ic146c8fa5ba25425cf785bae66f9c99b0faab944
lynxis at

#27036 (Feb 22, 2026, 8:45:16 PM)

dfu: protect USB_DFU_STATE_DFU_MANIFEST by a critical section

In the MANIFEST state, the IRQ won't move the state, but
to prevent incosistency between dfu_manifestation_complete &
dfu_state, use a critical section.

Change-Id: Idf5fb7d55b4051ba7e235dfa409a4de18a8f208c
lynxis at

#27035 (Feb 22, 2026, 8:45:11 PM)

dfu: irq: GET_STATUS: set state before sending it

The DFU spec, v1.1: "6.1.2 DFU_GETSTATUS Request" states the
GET_STATUS should contain the state,
to which the device transistions to after processing this message.

Change-Id: I6d28404d6936f7ea79fcee90f0c8191f0f623ad8
lynxis at

#27034 (Feb 22, 2026, 8:45:06 PM)

dfu: rewrite firmware downloading

Improve handling of dfu_state by moving more state changing towards the
IRQ handler. Having both the main loop and IRQ changes dfu_state within
the same state could lead to races.

The main loop is now only a simple worker which reports back via dfu_flash_done &
dfu_flash_status.

Change-Id: I345d5948455b25cd8a2efb1abfd9d0986ebd8cef
lynxis at

#27033 (Feb 22, 2026, 8:45:00 PM)

dfu: irq: replace if(states) with a switch case

Improves the overview. No functional change.

Change-Id: Ic32fe16dff4b7bb933ec62e36a9c7c7829aece1b
lynxis at

#27032 (Feb 22, 2026, 8:44:41 PM)

dfu: MANIFEST: mainloop: wait 5 ms before handling the state

Gives the USB stack some time to deliver the last USB message before
going through the state machine which might end in a too quick system reset.

Change-Id: If9178120eed46f75089abf1898db3176cce93df2
lynxis at

#27031 (Feb 22, 2026, 8:37:34 PM)

dfu: MANIFEST: mainloop: wait 5 ms before handling the state

Gives the USB stack some time to deliver the last USB message before
going through the state machine which might end in a too quick system reset.

Change-Id: If9178120eed46f75089abf1898db3176cce93df2
lynxis at

#27030 (Feb 22, 2026, 8:37:29 PM)

dfu: irq: replace if(states) with a switch case

Improves the overview. No functional change.

Change-Id: Ic32fe16dff4b7bb933ec62e36a9c7c7829aece1b
lynxis at

#27029 (Feb 22, 2026, 8:37:22 PM)

dfu: mainloop: work on a local copy of dfu_state

Prevent race conditions between main loop and irq.
Copy at the start of the loop the dfu state and work on it.

Change-Id: Ic146c8fa5ba25425cf785bae66f9c99b0faab944
lynxis at

#27028 (Feb 22, 2026, 8:37:16 PM)

dfu: make dfu_state/dfu_status volatile

Both variable might be changed from IRQ and from main loop.

Change-Id: I7ad5255064917c203cebe5ab54a5d457baa2f5ed
lynxis at

#27027 (Feb 22, 2026, 8:36:59 PM)

dfu: MANIFEST_SYNC: stay in MANIFEST_SYNC when manifestationIntolerant & completed

In theory a device which is manifestintolerant and completed the manifestation should
not reach MANIFEST_SYNC again.

Remove the state transistion to WAIT-RESET and stay in the current state and
wait for the main loop to change the state is safer.

Change-Id: I8c34a18e2336731126a8c01070d86e2547578e3d
lynxis at

#27026 (Feb 22, 2026, 8:36:53 PM)

dfu: usb_dfu() convert if() intos switch/case

Improves the overview of the handled states.
No functional change.

Change-Id: Ie0abcdb51612598e77cacf7772276919ded17d5a
lynxis at

#27025 (Feb 22, 2026, 8:36:46 PM)

dfu: irq: GET_STATUS: set state before sending it

The DFU spec, v1.1: "6.1.2 DFU_GETSTATUS Request" states the
GET_STATUS should contain the state,
to which the device transistions to after processing this message.

Change-Id: I6d28404d6936f7ea79fcee90f0c8191f0f623ad8
lynxis at

#27024 (Feb 22, 2026, 8:36:39 PM)

Improve comments on errata 2.6.10

Errata 2.6.10 affects Rev A, D, F: The cache lines
of AHB0 and AHB1 might not reset properly on Power up
resulting in courrupted data in rare cases.

The errata recommends fixing this by:
- for AHB0: WDT enable & disable
- for AHB1: disable and re-enable cache line

Change-Id: I3c35f590a4e43d778e70f2f377e0d470c3a652b2
lynxis at

#27023 (Feb 22, 2026, 8:36:24 PM)

dfu: protect USB_DFU_STATE_DFU_MANIFEST by a critical section

In the MANIFEST state, the IRQ won't move the state, but
to prevent incosistency between dfu_manifestation_complete &
dfu_state, use a critical section.

Change-Id: Idf5fb7d55b4051ba7e235dfa409a4de18a8f208c
lynxis at

#27022 (Feb 22, 2026, 8:36:03 PM)

dfu: rewrite firmware downloading

Improve handling of dfu_state by moving more state changing towards the
IRQ handler. Having both the main loop and IRQ changes dfu_state within
the same state could lead to races.

The main loop is now only a simple worker which reports back via dfu_flash_done &
dfu_flash_status.

Change-Id: I345d5948455b25cd8a2efb1abfd9d0986ebd8cef
lynxis at

#27021 (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

#27020 (Feb 22, 2026, 4:44:34 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

#27019 (Feb 22, 2026, 4:38:08 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

#27018 (Feb 22, 2026, 4:25:06 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

#27017 (Feb 22, 2026, 4:17:28 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

#27016 (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

#27015 (Feb 22, 2026, 3:44:20 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

#27014 (Feb 22, 2026, 3:44:17 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

#27013 (Feb 22, 2026, 3:44:13 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

#27012 (Feb 22, 2026, 3:42:07 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

#27011 (Feb 21, 2026, 11:21:25 AM)

main: rework panic handler

When an OSMO_ASSERT() fails it will call the osmo panic handler.
Previous it will always calls into a breakpoint which will require
a power-cycle.

Change the default (for production) to use a system reset.
But still allow calling into breakpoint by setting `break_on_panic` via SWD.

Change-Id: I91c732001e848ec5509bf81af8aac1a2a80eb718
lynxis at

#27010 (Feb 21, 2026, 11:17:49 AM)

main: rework panic handler

When an OSMO_ASSERT() fails it will call the osmo panic handler.
Previous it will always calls into a breakpoint which will require
a power-cycle.

Change the default (for production) to use a system reset.
But still allow calling into breakpoint by setting `break_on_panic` via SWD.

Change-Id: I91c732001e848ec5509bf81af8aac1a2a80eb718
lynxis at

#27009 (Feb 21, 2026, 11:16:00 AM)

main: rework panic handler

When an OSMO_ASSERT() fails it will call the osmo panic handler.
Previous it will always calls into a breakpoint which will require
a power-cycle.

Change the default (for production) to use a system reset.
But still allow calling into breakpoint by setting `break_on_panic` via SWD.

Change-Id: I91c732001e848ec5509bf81af8aac1a2a80eb718
lynxis at

#27008 (Feb 21, 2026, 11:12:10 AM)

main: fix crash when ccid_df_write_in() fails

The OSMO_ASSERT(msg->list.next != LLIST_POISON1) are checking msgb
which has been removed from the llist.
All llist members which aren't part of a list have LLIST_POISON1 assigned.

These OSMO_ASSERT()s will always trigger this msgb.

Fixes: a684bc4e38b4 ("Make ch9 usb tests work")
Change-Id: I49c81fba756f3620638b6c6c664f53e4a8758ef9
lynxis at

#27007 (Feb 21, 2026, 11:12:06 AM)

main: don't access msgbs after giving them away

Because of IRQ, it is dangerous to access a msgb,
which has been giving away to a queue (ownership transfer).

Further OSMO_ASSERT() should never fail on a queue'd object,
except it has been taken already from an IRQ context.
Fix a potential crash.

Fixes: a684bc4e38b4 ("Make ch9 usb tests work")
Change-Id: I79844f77d5cd75e08b0eb44b22c4ad223cb79dcb
lynxis at

#27006 (Feb 21, 2026, 11:08:04 AM)

ccid_common: iso_handle_fsm_events: add missing return

Fix warning about control reaches end of non-void function.

Change-Id: I4066c8a1ab1eadb3d8f8cbaf5aa0afbbb2e5dd80
lynxis at

#27005 (Feb 20, 2026, 12:32:55 PM)

Bump version: 1.1.2 → 1.1.3

Change-Id: I4ffcc7d6bba6fd86525dd93fc8c643d50d81b7f0
Oliver Smith at

#27004 (Feb 20, 2026, 10:58:21 AM)

Bump version: 1.1.2 → 1.1.3

Change-Id: Ibc9d5efa85def78cfc3f1f09f0cde46aa7cfbd3c
Oliver Smith at

#27003 (Feb 20, 2026, 10:19:05 AM)

ccid: fix rdr_to_pc_parameters and rdr_to_pc_hardware_error

Change-Id: I67d5cb876d20b29f4759d5b194606f34b8b966c4
ewild at

#27002 (Feb 20, 2026, 9:58:50 AM)

tcap: vty: Fix writing tcap-routing command

Change-Id: I36d23c0e330c224b69094fb861520c4a4a32b3d8
Pau Espin Pedrol at

#27001 (Feb 20, 2026, 1:33:12 AM)

esim/http_json_api.py: support text/plain response Content-Type

Allow returning text/plain Content-Types as 'data' output argument.

So far, all the esim/http_json_api functions require a JSON response.
However, a specific vendor has a list function where the request is JSON
but the response is text/plain CSV data. Allow and return in a dict.

Change-Id: Iba6e4cef1048b376050a435a900c0f395655a790
Neels Hofmeyr at

#27000 (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

#26999 (Feb 19, 2026, 5:33:28 PM)

remsim: server: add a client timeout test

1. Connect to the server
2. Don't answer to IPA PINGs
3. Server closes the connection
4. Client reconnects
5. Older server versions will crash

Change-Id: Iec52d3ce229c2ab84ab0ff9d8dbbff59b7f3fbd9
lynxis at

#26998 (Feb 19, 2026, 3:37:20 PM)

5gc: Split f_start_handleri_with_pars() into multiple helpers

This allows initializing multiple ConnHldr and then connecting them and
starting them later. This is similar to what is is done eg. in
MSC_Tests.

Change-Id: Ic60009c5f7fcdc43f6e13f9ea469bfaddc639c33
Pau Espin Pedrol at

#26997 (Feb 19, 2026, 3:03:59 PM)

5gc: Add missing TC_connection_suspend to control block

Fixes: 1af55d318d43967ee5d056bdf2bc3a50c096389b
Change-Id: I2e9e3647917f22e16d9dd6e7199f62a305cc57b3
Pau Espin Pedrol at

#26996 (Feb 19, 2026, 1:13:22 PM)

Bump version: 1.10.0.36-b9839-dirty → 1.11.0

Change-Id: I595b31071a071bfa5666931d99e24e9b56877a6f
Pau Espin Pedrol at

#26995 (Feb 19, 2026, 12:56:47 PM)

Add [no ]force-cell-sel-ind-after-rel

Change-Id: Ie5fa3e036e0a0dd4049a4230d6cd4cb7c158088e
Related: SYS#7482
Vadim Yanitskiy at

#26994 (Feb 19, 2026, 12:27:09 PM)

Bump version: 1.10.0.36-b9839-dirty → 1.11.0

Change-Id: I595b31071a071bfa5666931d99e24e9b56877a6f
Pau Espin Pedrol at

#26993 (Feb 19, 2026, 12:17:13 PM)

Bump version: 1.8.0.3-9533 → 1.8.1

Change-Id: I44a6d0216f2a8ea4a536374c99cfedfbec75eabf
Pau Espin Pedrol at

#26992 (Feb 19, 2026, 12:12:24 PM)

Bump version: 0.5.2.4-2463 → 0.5.3

Change-Id: I36a3c6219bbd4f7dc13b5d5e40687d3f61aa02d5
Pau Espin Pedrol at

#26991 (Feb 19, 2026, 12:04:12 PM)

Bump version: 1.14.0.10-44efd → 1.14.1

Change-Id: I2a3907eabebc7f282f0a00d50b11894847669c1f
Pau Espin Pedrol at

#26990 (Feb 19, 2026, 12:04:09 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

#26989 (Feb 19, 2026, 12:04:05 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

#26988 (Feb 19, 2026, 11:41:47 AM)

Bump version: 1.12.0.73-10f3 → 1.13.0

Change-Id: I877d255890a525a34fbf89101b3ff0bbd0989c87
Pau Espin Pedrol at

#26987 (Feb 19, 2026, 9:42:17 AM)

5gc: Introduce test TC_connection_suspend

The test is expected to fail because open5gs (as of v2.7.3) doesn't
implement such features; see open5gs ticket referenced below.

Related: SYS#7073
Related: open5gs GH#4322

Change-Id: I6da2571518a9b50369fa8e0dd19e447137ea20c6
Pau Espin Pedrol at

#26986 (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

#26985 (Feb 19, 2026, 8:18:45 AM)

Fix/change TC_tcap_loadshare_ipa_tcap_udts()

The behaviour changed to not reject tcap messages outside of any valid
route. Change the test expectation that these messages are indeed
forwarded.

Change-Id: Ibffa98702fd6eb276410630ab525d986fa0f36e0
dwillmann at

#26984 (Feb 18, 2026, 6:30:42 PM)

Fix/change TC_tcap_loadshare_ipa_tcap_udts()

The behaviour changed to not reject tcap messages outside of any valid
route. Change the test expectation that these messages are indeed
forwarded.

Change-Id: Ibffa98702fd6eb276410630ab525d986fa0f36e0
dwillmann at

#26983 (Feb 18, 2026, 5:35:37 PM)

5gc: Introduce test TC_connection_suspend

The test is expected to fail because open5gs (as of v2.7.3) doesn't
implement such features; see open5gs ticket referenced below.

Related: SYS#7073
Related: open5gs GH#4322

Change-Id: I6da2571518a9b50369fa8e0dd19e447137ea20c6
Pau Espin Pedrol at

#26982 (Feb 18, 2026, 4:30:41 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

#26981 (Feb 18, 2026, 12:57:24 PM)

Tear down context_maps when UPF assoc goes down

Related: SYS#7294
Change-Id: I7dcd9114861fa8f4bf855a02c286f85083ad75fe
Pau Espin Pedrol at

#26980 (Feb 18, 2026, 12:57:22 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

#26979 (Feb 18, 2026, 12:54:31 PM)

5gc: Introduce test TC_connection_inactive

The test is expected to fail because open5gs (as of v2.7.3) doesn't
implement such features; see open5gs ticket referenced below.

Related: SYS#7073
Related: open5gs GH#4319
Change-Id: Icf60dde814b7c8ef4cdb4c886423058c7d741a9b
Pau Espin Pedrol at

#26978 (Feb 18, 2026, 12:49:22 PM)

5gc: Introduce test TC_connection_inactive

The test is expected to fail because open5gs (as of v2.7.3) doesn't
implement such features; see open5gs ticket referenced below.

Related: SYS#7073
Related: open5gs GH#4319
Change-Id: Icf60dde814b7c8ef4cdb4c886423058c7d741a9b
Pau Espin Pedrol at

#26977 (Feb 18, 2026, 12:49:19 PM)

ngap: Add multiple templates related to RRC_INACTIVE

Change-Id: Ie0e6f5054c45e681373c6db59d2b298c71ad4836
Pau Espin Pedrol at

#26976 (Feb 17, 2026, 6:20: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

#26975 (Feb 17, 2026, 5:20:48 PM)

ngap: Update asn files V17.5.0 -> V19.1.0

Copied from wireshark.git be5cfd209f62933bc46744dca3e22e731b24ab6b
epan/dissectors/asn1/ngap/*.asn.

Change-Id: I4838c1031f2e168e6bce59f3d4fc7871fb597466
Pau Espin Pedrol at

#26974 (Feb 17, 2026, 4:39:22 PM)

5gc: Update details on missing open5gs 5GC features

Change-Id: I7be0bbb70207ac6c0ff77f230da56aace29c1eda
Pau Espin Pedrol at

#26973 (Feb 17, 2026, 4:28:47 PM)

5gc: Update details on missing open5gs 5GC features

Change-Id: I7be0bbb70207ac6c0ff77f230da56aace29c1eda
Pau Espin Pedrol at

#26972 (Feb 17, 2026, 4:24:07 PM)

5gc: Update details on missing open5gs 5GC features

Change-Id: I7be0bbb70207ac6c0ff77f230da56aace29c1eda
Pau Espin Pedrol at

#26971 (Feb 17, 2026, 1:32:57 PM)

ttcn3-asterisk-ims-ue-test: show trace on coredump

Use wrapper_core_bt_on_error.sh to show a backtrace in case asterisk
crashes and a coredump is generated. Set CWD to /data, so the core and
core.backtrace files end up in the jenkins artifacts.

The result looks like this (forced a segfault in main() to test this):
  $ cat asterisk-ipv4/core.backtrace
  [New LWP 18]
  [Thread debugging using libthread_db enabled]
  Using host libthread_db library "/lib/x86_64-linux-gnu/libthread_db.so.1".
  Core was generated by `/usr/sbin/asterisk -C /etc/asterisk/asterisk.conf -f -g -vvvvv -ddddd'.
  Program terminated with signal SIGSEGV, Segmentation fault.
  #0  0x000073908c476ffb in ?? () from /lib/x86_64-linux-gnu/libc.so.6
  #0  0x000073908c476ffb in ?? () from /lib/x86_64-linux-gnu/libc.so.6
  #1  0x00005ba2677294dc in memset (__dest=0x0, __ch=1, __len=1) at /usr/include/x86_64-linux-gnu/bits/string_fortified.h:59
  #2  main (argc=<optimized out>, argv=0x7fff865fdd28) at asterisk.c:3839

Change-Id: Iee22cbeaa2b2c136c789afc3ebd3ec1be10a6ac7
Oliver Smith at

#26970 (Feb 17, 2026, 1:32:54 PM)

asterisk-master: use git clone --depth=1

Speed up cloning the big asterisk git repositories.

Change-Id: Ifc0c2375482e39ecf2f34b93cf6f02a83da29990
Oliver Smith at

#26969 (Feb 17, 2026, 1:27:49 PM)

ttcn3-asterisk-ims-ue-test: show trace on coredump

Use wrapper_core_bt_on_error.sh to show a backtrace in case asterisk
crashes and a coredump is generated. Set CWD to /data, so the core and
core.backtrace files end up in the jenkins artifacts.

The result looks like this (forced a segfault in main() to test this):
  $ cat asterisk-ipv4/core.backtrace
  [New LWP 18]
  [Thread debugging using libthread_db enabled]
  Using host libthread_db library "/lib/x86_64-linux-gnu/libthread_db.so.1".
  Core was generated by `/usr/sbin/asterisk -C /etc/asterisk/asterisk.conf -f -g -vvvvv -ddddd'.
  Program terminated with signal SIGSEGV, Segmentation fault.
  #0  0x000073908c476ffb in ?? () from /lib/x86_64-linux-gnu/libc.so.6
  #0  0x000073908c476ffb in ?? () from /lib/x86_64-linux-gnu/libc.so.6
  #1  0x00005ba2677294dc in memset (__dest=0x0, __ch=1, __len=1) at /usr/include/x86_64-linux-gnu/bits/string_fortified.h:59
  #2  main (argc=<optimized out>, argv=0x7fff865fdd28) at asterisk.c:3839

Change-Id: Iee22cbeaa2b2c136c789afc3ebd3ec1be10a6ac7
Oliver Smith at

#26968 (Feb 17, 2026, 1:27:45 PM)

asterisk-master: use git clone --depth=1

Speed up cloning the big asterisk git repositories.

Change-Id: Ifc0c2375482e39ecf2f34b93cf6f02a83da29990
Oliver Smith at

#26967 (Feb 17, 2026, 1:27:41 PM)

common/wrapper_core_bt_on_error: import

Import this script from osmo-ci dfa9fcca
("scripts/wrapper_core_bt_on_error: new script"), so it can be used in
ttcn3-asterisk-ims-ue-test in a follow-up patch.

Change-Id: I773ff8b8c07c96e1b5b417fa28518ac7dc2e14ec
Oliver Smith at

#26966 (Feb 17, 2026, 9:12:13 AM)

Fix/change TC_tcap_loadshare_ipa_tcap_udts()

The behaviour changed to not reject tcap messages outside of any valid
route. Change the test expectation that these messages are indeed
forwarded.

Change-Id: Ibffa98702fd6eb276410630ab525d986fa0f36e0
dwillmann at

#26965 (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

#26964 (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

#26963 (Feb 17, 2026, 12:49:10 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

#26962 (Feb 16, 2026, 5:40:00 PM)

hnbgw: Introduce test TC_pfcp_heartbeat_recovery_timestamp

Related: SYS#7294
Change-Id: I3f8098d7a34666961437fecc5100422a5e7436a4
Pau Espin Pedrol at

#26961 (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

#26960 (Feb 16, 2026, 3:52:27 PM)

hnbgw: introduce test TC_pfcp_heartbeat_timeout

Related: SYS#7294
Change-Id: I1e0b50bc19e1fa1240274baea1e7fedd1265ffcb
Pau Espin Pedrol at

#26959 (Feb 16, 2026, 3:15:35 PM)

Tear down context_maps when UPF assoc goes down

Related: SYS#7294
Change-Id: I7dcd9114861fa8f4bf855a02c286f85083ad75fe
Pau Espin Pedrol at

#26958 (Feb 16, 2026, 3:15:32 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

#26957 (Feb 16, 2026, 3:14:29 PM)

hnbgw: TC_rab_assign_mgcp_to: Allow hnbgw to tear down CN conn at SCCP level

Newer versions of osmo-hnbgw will be tearing down the CN conn at SCCP
level by transmitting an RLSD in this scenario, instead of sending a Iu
RANAP Release Request crafted by the osmo-hnbgw itself.
The HNBGW is expected to forward RANAP messages between UE/HNB and CN,
not to generate them.

Related: SYS#7294
Change-Id: Idb062a072c7403442ce981c6c9caeb7effb86554
Pau Espin Pedrol at

#26956 (Feb 16, 2026, 3:14:25 PM)

hnbgw: introduce test TC_pfcp_heartbeat_timeout

Related: SYS#7294
Change-Id: I1e0b50bc19e1fa1240274baea1e7fedd1265ffcb
Pau Espin Pedrol at

#26955 (Feb 16, 2026, 2:32:49 PM)

bts: as_rsl_meas_res(): tolerate low RxLev in early reports

The MS is not guaranteed to begin transmitting immediately after
activation of the respective logical channel.  There is typically a
short interval during which the BTS receives no bursts.  Consequently,
the initial RSL measurement reports are expected to indicate poor
RxLev/RxQual values.

We already tolerate bad RxQual values;  however, sporadic failures
still occur due to low RxLev in the very first report.  Extend the
logic in f_build_meas_res_tmpl() to tolerate low RxLev as well.

Change-Id: Ic632917d429ec597dba524bf79749944cf1fc628
Related: 8ce558dd ("bts: as_rsl_meas_res(): tolerate bad RxQual in early reports")
Related: OS#6933
Vadim Yanitskiy at

#26954 (Feb 16, 2026, 2:32:45 PM)

Makefile: clean-logs: also remove *.merged

Change-Id: I6efe839ae2d527387b533fd110965335c0f850c9
Vadim Yanitskiy at

#26953 (Feb 16, 2026, 11:19:06 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

#26952 (Feb 16, 2026, 11:19:02 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

#26951 (Feb 16, 2026, 10:54:01 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

#26950 (Feb 16, 2026, 10:41: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

#26949 (Feb 16, 2026, 10:41:52 AM)

cosmetic: xua_as_fsm: Fix mixed brace/no-brace blocks in if/else

Change-Id: Ibfd818d354c09409b04b392853f544a220de3a72
Pau Espin Pedrol at

#26948 (Feb 16, 2026, 10:41:48 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

#26947 (Feb 16, 2026, 10:41:43 AM)

tests/vty: Introduce testASPservesTonsOfAS

Change-Id: I39016a479fde7d61b7c0f39ca769cd8c958b55b6
Pau Espin Pedrol at

#26946 (Feb 16, 2026, 10:41:40 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

#26945 (Feb 16, 2026, 10:41: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

#26944 (Feb 16, 2026, 10:41:33 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

#26943 (Feb 16, 2026, 10:41:30 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

#26942 (Feb 16, 2026, 10:41:27 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

#26941 (Feb 16, 2026, 10:41:23 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

#26940 (Feb 16, 2026, 10:41:18 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

#26939 (Feb 16, 2026, 10:41:12 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

#26938 (Feb 16, 2026, 10:38:39 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

#26937 (Feb 16, 2026, 10:35:18 AM)

m3ua: Fix missing break in m3a_rx_snm for IPSP

Fixes: e597f08dde51361434a027dc4362a5698220afb6
Change-Id: I387794b0a736ee8419e7d12dc0f586aa30b9ac26
Pau Espin Pedrol at

#26936 (Feb 16, 2026, 5:10:00 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

#26935 (Feb 16, 2026, 5:09:29 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

#26934 (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

#26933 (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

#26932 (Feb 15, 2026, 5:25:50 PM)

personalization: add param_source.py, add batch.py

Implement pySim.esim.saip.batch.BatchPersonalization,
generating N eSIM profiles from a preset configuration.

Batch parameters can be fed by a constant, incrementing, random or from
CSV rows: add pySim.esim.saip.param_source.* classes to feed such input
to each of the BatchPersonalization's ConfigurableParameter instances.

Related: SYS#6768
Change-Id: I497c60c101ea0eea980e8b1a4b1f36c0eda39002

rather move BatchPersonalization to separate module

Change-Id: I01ae40a06605eb205bfb409189fcd2b3a128855a
Neels Hofmeyr at

#26931 (Feb 15, 2026, 5:25:48 PM)

personalization: indicate default ParamSource per ConfigurableParameter

Add default_source class members pointing to ParamSource classes to all
ConfigurableParameter subclasses.

This is useful to automatically set up a default ParamSource for a given
ConfigurableParameter subclass, during user interaction to produce a
batch personalization.

For example, if the user selects a Pin1 parameter, a calling program can
implicitly set this to a RandomDigitSource, which will magically make it
work the way that most users need.

BTW, default_source and default_value can be combined to configure a
matching ParamSource instance:

  my_source = MyParam.default_source.from_str( MyParam.default_value )

Change-Id: Ie58d13bce3fa1aa2547cf3cee918c2f5b30a8b32
Neels Hofmeyr at

#26930 (Feb 15, 2026, 5:25:46 PM)

personalization: implement reading back values from a PES

Implement get_values_from_pes(), the reverse direction of apply_val():
read back and return values from a ProfileElementSequence. Implement for
all ConfigurableParameter subclasses.

Future: SdKey.get_values_from_pes() is reading pe.decoded[], which works
fine, but I07dfc378705eba1318e9e8652796cbde106c6a52 will change this
implementation to use the higher level ProfileElementSD members.

Implementation detail:

Implement get_values_from_pes() as classmethod that returns a generator.
Subclasses should yield all occurences of their parameter in a given
PES.

For example, the ICCID can appear in multiple places.
Iccid.get_values_from_pes() yields all of the individual values. A set()
of the results quickly tells whether the PES is consistent.

Rationales for reading back values:

This allows auditing an eSIM profile, particularly for producing an
output.csv from a batch personalization (that generated lots of random
key material which now needs to be fed to an HLR...).

Reading back from a binary result is more reliable than storing the
values that were fed into a personalization.
By auditing final DER results with this code, I discovered:
- "oh, there already was some key material in my UPP template."
- "all IMSIs ended up the same, forgot to set up the parameter."
- the SdKey.apply() implementations currently don't work, see
  I07dfc378705eba1318e9e8652796cbde106c6a52 for a fix.

Change-Id: I234fc4317f0bdc1a486f0cee4fa432c1dce9b463
Neels Hofmeyr at

#26929 (Feb 15, 2026, 5:25:43 PM)

personalization: allow reading back multiple values from PES

Change-Id: Iecb68af7c216c6b9dc3add469564416b6f37f7b2
Neels Hofmeyr at

#26928 (Feb 15, 2026, 5:10:00 PM)

MilenageRotationConstants: set example_input to 3GPP default

Change-Id: I36a9434b2f96d26d710f489d5afce1f0ef05bba1
Neels Hofmeyr at

#26927 (Feb 13, 2026, 2:44:57 PM)

pySim.esim.saip.File: Support pinStatusTemplateDO + lcsi

The tuples defining a DF or ADF in an eSIM template must contain a
pinStatusTemplateDO.  When parsing tuples into a File() instance, we
must save it, and re-create it at the time we re-encode that file.

Same applies to the lcsi (life cycle state indicator), which may
optionally exist for any file.

Change-Id: I073aa4374f2cd664d07fa0224bf0d4c809cdf4aa
Closes: OS#6955
laforge at

#26926 (Feb 13, 2026, 1:14:05 PM)

WIP: hnbgw: introduce test TC_pfcp_heartbeat_timeout

Related: SYS#7294
Change-Id: I1e0b50bc19e1fa1240274baea1e7fedd1265ffcb
Pau Espin Pedrol at

#26925 (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

#26924 (Feb 13, 2026, 8:54:18 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

#26923 (Feb 13, 2026, 8:54:15 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

#26922 (Feb 13, 2026, 8:54:12 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

#26921 (Feb 13, 2026, 8:54:10 AM)

cosmetic: xua_as_fsm: Fix mixed brace/no-brace blocks in if/else

Change-Id: Ibfd818d354c09409b04b392853f544a220de3a72
Pau Espin Pedrol at

#26920 (Feb 13, 2026, 8:52:52 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

#26919 (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

#26918 (Feb 12, 2026, 3:24:00 PM)

cosmetic: xua_as_fsm: Fix mixed brace/no-brace blocks in if/else

Change-Id: Ibfd818d354c09409b04b392853f544a220de3a72
Pau Espin Pedrol at

#26917 (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

#26916 (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

#26915 (Feb 12, 2026, 1:26:17 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

#26914 (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

#26913 (Feb 12, 2026, 11:37:50 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

#26912 (Feb 12, 2026, 11:25:23 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

#26911 (Feb 12, 2026, 11:25:20 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

#26910 (Feb 12, 2026, 11:06:14 AM)

WIP: asp: Introduce asp->assoc_as_list

Related: SYS#6953
Change-Id: I1ca90748286374109dbb4277cbc7b2337ce2072a
Pau Espin Pedrol at

#26909 (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

#26908 (Feb 12, 2026, 10:33:54 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

#26907 (Feb 12, 2026, 10:33:50 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

#26906 (Feb 12, 2026, 10:33:48 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

#26905 (Feb 12, 2026, 10:32:42 AM)

tests/vty: Introduce testASPservesTonsOfAS

Change-Id: I39016a479fde7d61b7c0f39ca769cd8c958b55b6
Pau Espin Pedrol at

#26904 (Feb 11, 2026, 4:36:37 PM)

tests/vty: Introduce testASPservesTonsOfAS

Change-Id: I39016a479fde7d61b7c0f39ca769cd8c958b55b6
Pau Espin Pedrol at

#26903 (Feb 11, 2026, 4:10:04 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

#26902 (Feb 11, 2026, 3:30:44 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

#26901 (Feb 11, 2026, 1:12:29 PM)

msc: TC_ho_inter_bsc: wait for the target BSC to become ready

A race condition may occur between the two testcase components
emulating BSCs: the source BSC initiates handover to the terget
BSC before the later completes connection establishment with the
MSC.  In this case, the MSC fails to find the target peer and
rejects our HandoverRequired with HandoverRequiredReject.

  Target RAN peer from neighbor config is not connected: Cell ID CGI:023-42-5-6 resolves to target address 0.24.2
  Cannot find target peer for cell ID CGI:023-42-5-6
  Attempted Handover to 1 cells without success

Let's avoid this by waiting for the target BSC to become available
before initiating the handover procedure.  Use the COORD port
("intercom") to signal readiness of the target BSC.

Change-Id: I00b8a8b89ec7bb15590d30aadf40055981375a5d
Related: OS#6951
Vadim Yanitskiy at

#26900 (Feb 11, 2026, 12:49: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

#26899 (Feb 11, 2026, 12:48: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

#26898 (Feb 11, 2026, 12:46: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

#26897 (Feb 11, 2026, 12:45:43 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

#26896 (Feb 11, 2026, 10:29:53 AM)

msc: f_tc_ho_inter_bsc0(): catch BSSMAP HandoverRequiredReject

It may happen that the target BSC is not yet connected to the MSC.
In this case the MSC rejects handover with HandoverRequiredReject.
Let's catch this PDU to make the verdict cleaner in such case.

Change-Id: I5ba98e323e0c7794554ccb115d7697ad03ccbfa5
Vadim Yanitskiy at

#26895 (Feb 11, 2026, 5:20:14 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

#26894 (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

#26893 (Feb 10, 2026, 3:41:36 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

#26892 (Feb 10, 2026, 3:08:40 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

#26891 (Feb 10, 2026, 1:11:21 PM)

compile_asn1_subdir: filter compiled files by .asn suffix

When I open the .asn file in vim, pySim should not attempt to read the
vim .swp file as asn.1.

  File "/home/moi/osmo-dev/src/pysim/pySim/esim/saip/__init__.py", line 45, in <module>
    asn1 = compile_asn1_subdir('saip')
[...]
  File "<frozen codecs>", line 325, in decode
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xad in position 21: invalid start byte

Related: OS#6937
Change-Id: I37df3fc081e51e2ed2198876c63f6e68ecc8fcd8
Neels Hofmeyr at

#26890 (Feb 10, 2026, 1:01:38 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

#26889 (Feb 10, 2026, 1:01:23 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

#26888 (Feb 10, 2026, 12:47:20 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

#26887 (Feb 10, 2026, 12:43:28 PM)

esim/http_json_api: add alternative API interface (follow up)

This is a follow up patch to change:
I2a5d4b59b12e08d5eae7a1215814d3a69c8921f6

- do not ignore length of kwargs
- fix role parameter (roles other than 'legacy_client' can be used now)
- use startswith instead of match

Related: SYS#7866
Change-Id: Ifae13e82d671ff09bddf771f063a388d2ab283eb
pmaier@sysmocom.de at

#26886 (Feb 10, 2026, 12:32:39 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

#26885 (Feb 10, 2026, 12:31:01 PM)

jobs/build-kernels-testenv: use linux-shallow-clone

Related: OS#6938
Change-Id: I8cb2acfaf585b9f92347a4562525a66ed03b0236
Oliver Smith at

#26884 (Feb 10, 2026, 12:30:59 PM)

scripts/kernel/linux-shallow-clone: new script

Add a script that maintains a linux repository in one place on jenkins
nodes, so we need less git clones from git.kernel.org and less disk
space. All jobs that need a kernel tree can now clone the relevant
branch directly from the jenkins node.

Follow up patches will add a jenkins job that runs the script daily and
adjust the existing jobs to make use of this instead of doing their own
clones.

Currently this script produces a 396M bare git repository.

Related: OS#6938
Change-Id: Id3aadb46813047ecac3b80868192809b272dba0e
Oliver Smith at

#26883 (Feb 10, 2026, 12:30:57 PM)

jobs/linux-shallow-clone: new jenkins job

Related: OS#6938
Change-Id: Ia58cdc82a655d4cc772a84adb675e98961bf86c5
Oliver Smith at

#26882 (Feb 10, 2026, 12:30:55 PM)

jobs/master-builds-dahdi: use linux-shallow-clone

Related: OS#6938
Change-Id: Iea0af6259bd481c946ff72d6552b65668fd809ca
Oliver Smith at

#26881 (Feb 10, 2026, 12:30:52 PM)

jobs/gerrit-verifications-dahdi: use linux-shallow-clone

Related: OS#6938
Change-Id: Ie8d9be886cc1d089e015f03bcedf0307f4f312e4
Oliver Smith at

#26880 (Feb 10, 2026, 10:36:26 AM)

pySim-shell_test/euicc: ensure test-profile is enabled

When testing commands like get_profile_info, enable_profile,
disable_profile or the commands to manage notifications, we
should ensure that the correct profile is enabled before
executing the actual testcase.

Change-Id: Ie57b0305876bc5001ab3a9c3a3b5711408161b74
pmaier@sysmocom.de at

#26879 (Feb 9, 2026, 5:31:58 PM)

sua: Support rx SCON in role=SG

Change-Id: Ide2b4f876ddbdb1bb0bfed11fad6fc13aaf1afda
Pau Espin Pedrol at

#26878 (Feb 9, 2026, 5:31:55 PM)

sua: Support rx SCON in role=ASP

Change-Id: I1e4146c2cb8fab460d5e810b602c20293272c2e4
Pau Espin Pedrol at

#26877 (Feb 9, 2026, 5:31:00 PM)

sua: Support rx SCON in role=IPSP

Change-Id: I3f46b634084c1d71643812828d4f114ab45dffde
Pau Espin Pedrol at

#26876 (Feb 9, 2026, 4:37:18 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

#26875 (Feb 9, 2026, 4:29:18 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

#26874 (Feb 9, 2026, 2:25:07 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

#26873 (Feb 9, 2026, 1:34: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

#26872 (Feb 9, 2026, 1:00:35 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

#26871 (Feb 9, 2026, 12:41:51 PM)

Osmocom_OBS_sync: fix failing on new scmsync tag

The openSUSE OBS instance has added an scmsync tag to their debian 13
meta config:

  <scmsync>https://src.opensuse.org/obs/debian#13</scmsync>

This feature is not supported by the stable OBS version yet (they run
current master), and so the sync fails with:

  project validation error: 6:0: ERROR: Element project has extra content: scmsync

Remove the tag to fix this.

Change-Id: Ia2d2ce3a2eeda9a0ed7ce7c7de54293081b44f4e
Oliver Smith at

#26870 (Feb 9, 2026, 12:37:42 PM)

pySim/euicc: fix encoding/decoding of Iccid

The class Iccid uses a BcdAdapter to encoded/decode the ICCID. This
works fine for ICCIDs that have an even (20) number of digits. In case
the digit count is odd (19), the ICCID the last digit requires padding.

Let's switch to PaddedBcdAdapter for encoding/decoding, to ensure that
odd-length ICCIDs are padded automatically.

Change-Id: I527a44ba454656a0d682ceb590eec6d9d0ac883a
Related: OS#6868
pmaier@sysmocom.de at

#26869 (Feb 9, 2026, 12:37:39 PM)

pySim-shell_test/euicc: ensure test-profile is enabled

When testing commands like get_profile_info, enable_profile,
disable_profile or the commands to manage notifications, we
should ensure that the correct profile is enabled before
executing the actual testcase.

Change-Id: Ie57b0305876bc5001ab3a9c3a3b5711408161b74
pmaier@sysmocom.de at

#26868 (Feb 9, 2026, 12:36:39 PM)

Add CAS channel support

CAS is currently supported by e1d driver only.

Change-Id: I81cc89e01bb4207dc899ab28f24a131f24b61c9c
Andreas Eversberg at

#26867 (Feb 9, 2026, 12:36:02 PM)

pySim/global_platform: replace deprecated argument group() creation

The global platform code used install_cap_parser.add_mutually_exclusive_group().add_argument_group()
But calling add_argument_group() on an exclusive group was never an intended feature nor
according to python docs was a working feature.

Change-Id: I4f73d3417a12b7fe94e33a265cdae244f3c9a1e9
lynxis at

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

logging: Fix print tid value in multithreadded programs

Change-Id: I363751ab1368d916aad8905b056ec4f9d62b7175
Pau Espin Pedrol at

#26865 (Feb 9, 2026, 11:36:15 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

#26864 (Feb 9, 2026, 11:36:11 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

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

osmo_io: Move function declaration to internal header

Change-Id: I25ffb94e00225bcdc565f56a3f0f7834df00e974
Pau Espin Pedrol at

#26862 (Feb 9, 2026, 11:01:39 AM)

pysim.utils.decomposeATR: Fix docutils warning

pySim/utils.py:docstring of pySim.utils.decomposeATR:9: WARNING: Block quote ends without a blank line; unexpected unindent. [docutils]

Change-Id: Ifda4ba15014ba97634fd5bd5c9b19d9110f4670e
laforge at

#26861 (Feb 9, 2026, 11:01:37 AM)

pySim.esim.saip: Fix docstring warnings:

this fixes the following two warnings:

pySim/esim/saip/__init__.py:docstring of pySim.esim.saip.FsNode.walk:1: WARNING: Inline strong start-string without end-string. [docutils]
pySim/esim/saip/__init__.py:docstring of pySim.esim.saip.FsNodeDF.walk:1: WARNING: Inline strong start-string without end-string. [docutils]

Change-Id: Id7debf9296923b735f76623808cee68967a1ece7
laforge at

#26860 (Feb 9, 2026, 11:01:34 AM)

pySim.esim.saip.personalization: Fix docstring errors + warnings

pysim/pySim/esim/saip/personalization.py:docstring of pySim.esim.saip.personalization.ConfigurableParameter:27: ERROR: Unexpected indentation. [docutils]
pysim/pySim/esim/saip/personalization.py:docstring of pySim.esim.saip.personalization.ConfigurableParameter:29: WARNING: Block quote ends without a blank line; unexpected unindent. [docutils]
pysim/pySim/esim/saip/personalization.py:docstring of pySim.esim.saip.personalization.ConfigurableParameter:34: ERROR: Unexpected indentation. [docutils]
pysim/pySim/esim/saip/personalization.py:docstring of pySim.esim.saip.personalization.ConfigurableParameter:35: WARNING: Block quote ends without a blank line; unexpected unindent. [docutils]
pysim/pySim/esim/saip/personalization.py:docstring of pySim.esim.saip.personalization.ConfigurableParameter:52: ERROR: Unexpected indentation. [docutils]
pysim/pySim/esim/saip/personalization.py:docstring of pySim.esim.saip.personalization.ConfigurableParameter:53: WARNING: Block quote ends without a blank line; unexpected unindent. [docutils]

Change-Id: I3918308856c3a1a5e6e90561c3e2a6b88040670d
laforge at

#26859 (Feb 9, 2026, 11:01:32 AM)

pySim.esim.saip.personalization: Fix docstring error

pySim/esim/saip/personalization.py:docstring of pySim.esim.saip.personalization.MilenageXoringConstants:4: ERROR: Unexpected indentation. [docutils]

Change-Id: If6ae360b7f74c095fa9075ae9aa988440496e6de
laforge at

#26858 (Feb 9, 2026, 11:00:48 AM)

pySim-shell_test/euicc: ensure test-profile is enabled

When testing commands like get_profile_info, enable_profile,
disable_profile or the commands to manage notifications, we
should ensure that the correct profile is enabled before
executing the actual testcase.

Change-Id: Ie57b0305876bc5001ab3a9c3a3b5711408161b74
pmaier@sysmocom.de at

#26857 (Feb 9, 2026, 10:43:59 AM)

pySim-shell_test/euicc: ensure test-profile is enabled

When testing commands like get_profile_info, enable_profile
or disable_profile, we should ensure that the correct profile
is enabled befor executing the actual testcase.

Change-Id: Ie57b0305876bc5001ab3a9c3a3b5711408161b74
pmaier@sysmocom.de at

#26856 (Feb 9, 2026, 10:17:33 AM)

pySim-shell_test/euicc: ensure test-profile is enabled

When testing the enable_profile / disable_profile commands we expect that
the profile we test with is enabled before the test begins. To be more
robust lets send an enable_profile command before the actual test begins.

Change-Id: Ie57b0305876bc5001ab3a9c3a3b5711408161b74
pmaier@sysmocom.de at

#26855 (Feb 9, 2026, 10:06:01 AM)

ModemATCommandLink: fix SyntaxWarning: invalid escape sequence '\+'

Change-Id: If8de5299a4dc5a8525ef6657213db95d30e3c83b
Fixes: OS#6948
Vadim Yanitskiy at

#26854 (Feb 9, 2026, 9:10:39 AM)

pySim-shell_test/euicc: fix testcase method name

We have two test_enable_disable_profile method, the second one should
be called test_set_nickname.

Change-Id: I5ff79218fdafc8c42c8b58cc00be3e56e09d808b
pmaier@sysmocom.de at

#26853 (Feb 7, 2026, 1:55:13 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

#26852 (Feb 7, 2026, 12:57:22 PM)

pySim/global_platform: replace deprecated argument group() creation

The global platform code used install_cap_parser.add_mutually_exclusive_group().add_argument_group()
But calling add_argument_group() on an exclusive group was never an intended feature nor
according to python docs was a working feature.

Change-Id: I4f73d3417a12b7fe94e33a265cdae244f3c9a1e9
lynxis at

#26851 (Feb 7, 2026, 12:13:06 PM)

s1ap: add {enc,dec}_S1AP_Global_ENB_ID() API

Change-Id: I83c314f4929a6eb749dfa8dbd1e1371a90481ed6
Related: OS#6490
Vadim Yanitskiy at

#26850 (Feb 7, 2026, 12:13:02 PM)

{hnbap,ranap,rua,s1ap,sabp,sbcap}: use TITAN's ASN.1 PER codec

TITAN has built-in ASN.1 PER codec since version 10.0.0.
Drop libfftranscode dependency, use TTCN_EncDec::CT_PER / PER_ALIGNED.

Change-Id: I990a9c01d965e185fc64bd751ea0685e5d3b869c
Related: OS#6490
Vadim Yanitskiy at

#26849 (Feb 6, 2026, 5:21:59 PM)

xua_default_fsm: Support IPSP role

Change-Id: Id9ad8bbfce5cf15fedcba83034ae383e61d3b3a3
Pau Espin Pedrol at

#26848 (Feb 6, 2026, 5:21:55 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

#26847 (Feb 6, 2026, 5:21:52 PM)

m3ua: Allow rx SCON in IPSP role

Change-Id: I49838219aab912243a761ab9b5167095e363c72b
Pau Espin Pedrol at

#26846 (Feb 6, 2026, 5:21:48 PM)

xua_default_fsm: Support IPSP role

Change-Id: Id9ad8bbfce5cf15fedcba83034ae383e61d3b3a3
Pau Espin Pedrol at

#26845 (Feb 6, 2026, 5:21:45 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

#26844 (Feb 6, 2026, 5:21: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

#26843 (Feb 6, 2026, 5:21:39 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

#26842 (Feb 6, 2026, 5:21:35 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

#26841 (Feb 6, 2026, 5:21:32 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

#26840 (Feb 6, 2026, 5:21:27 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

#26839 (Feb 6, 2026, 5:21: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

#26838 (Feb 6, 2026, 5:21:19 PM)

xua_asp_fsm: Improvements to support IPSP

Change-Id: Ia268848ee9bb2f97a47ba9be60ecd16fbeb4fb40
Pau Espin Pedrol at

#26837 (Feb 6, 2026, 5:21:14 PM)

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

The spec explicitly prohibits it.

Change-Id: I38bbd9226bad478f8068d02f7a4d7b3711596208
Pau Espin Pedrol at

#26836 (Feb 6, 2026, 5:21:12 PM)

Document osmo_xua_layer_manager prim_cb

Change-Id: I1347c3538435985836ee5fe1d9dd42996e32ff94
Pau Espin Pedrol at

#26835 (Feb 6, 2026, 5:21:09 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

#26834 (Feb 6, 2026, 5:21:06 PM)

xua_rkm: Adapt RKM code to support IPSP

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

#26833 (Feb 6, 2026, 5:21:02 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

#26832 (Feb 6, 2026, 5:20:59 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

#26831 (Feb 6, 2026, 5:20: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

#26830 (Feb 6, 2026, 5:15:33 PM)

xua_default_lm_fsm: Move timer_cb further below

As usually done in osmo_fsm implemnetations.

Change-Id: Ibdc04d9ece0b3955da44849755a87ec28c17f140
Pau Espin Pedrol at

#26829 (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

#26828 (Feb 5, 2026, 10:02:04 PM)

bts: as_rsl_meas_res(): tolerate bad RxQual in early reports

Bit errors are expected during early stage of channel establishment.
Ignore bad RxQual in the very first reports (4 * 0.480s = 1.92s).

This reduces probability of sporadic failures.

Change-Id: Ie8acb15b66cd92092ec49bc8caeaf0ad4d471f1d
Related: OS#6933
Vadim Yanitskiy at

#26827 (Feb 5, 2026, 10:01:58 PM)

bts: as_rsl_meas_res(): do not expect dummy UL SACCH

We're now populating the UL SACCH cache before establishing a
decicated channel in f_est_dchan(), so this special case is
no longer needed and can be safely removed.

Change-Id: I6eeee2876a76d41ab453af4c7724173fea773b83
Related: I4781fe7539e64e77d594e84f905646c127f46b64
Related: OS#6933
Vadim Yanitskiy at

#26826 (Feb 5, 2026, 8:18:18 PM)

bts: as_rsl_meas_res(): do not expect dummy UL SACCH

We're now populating the UL SACCH cache before establishing a
decicated channel in f_est_dchan(), so this special case is
no longer needed and can be safely removed.

Change-Id: I6eeee2876a76d41ab453af4c7724173fea773b83
Related: I4781fe7539e64e77d594e84f905646c127f46b64
Related: OS#6933
Vadim Yanitskiy at

#26825 (Feb 5, 2026, 5:56:54 PM)

bts: TC_rsl_ms_pwr_dyn_ass_updown: misc improvements

Change-Id: Iae3fa5f09d68bd472f7236bf882f5b168d87384a
Related: OS#6945
Vadim Yanitskiy at

#26824 (Feb 5, 2026, 5:56:50 PM)

bts: fix TC_rsl_ms_pwr_dyn_ass_updown: simulate a good C/I value

Now that we populate the UL SACCH cache in advance, trxcon is sending
ms-pwr-lvl 7 in the first UL SACCH block (as expected).  This suddenly
makes the testcase fail, because now the MS power loop is perfectly
happy about the received input values and does not order any changes
to the current MS power level anymore, contrary to our expectations.

Why? Short answer: because of C/I (curr 6, avg 6) being outside of
the good range (thresh 13..17).  The MS power loop intentionally
avoids reducing Tx power because that would potentially degrade the
link quality (C/I) even further.  Solution: let's order fake_trx.py
to simulate a C/I value that is within the thresholds.

This alone does not fix the testcase yet, another fix follows.

Change-Id: I8926fc925e930bc2703210931b613988161a72da
Related: c246f207 ("bts: f_est_dchan(): populate UL SACCH cache")
Related: OS#6945
Vadim Yanitskiy at

#26823 (Feb 5, 2026, 5:56:45 PM)

bts: fix TC_rsl_ms_pwr_dyn_ass_updown: adjust the timers

This testcase predates major changes to the MS power control logic
in osmo-bts and was passing thanks to a coincidence (broken UL SACCH
cache in trxcon).  Specifically, the MS power loop is now using
P_Con_INTERVAL=4 by default.  This means that the power control
decision is intentionally delayed and a change may occur only once
in a period of 4 SACCH blocks (N=4 is ~1.92s).

Adjust the timer values to take this into account.  Take a chance
to move comments in-place and expand them with more details.

This patch makes TC_rsl_ms_pwr_dyn_ass_updown pass again.

Change-Id: I36d87c12f49ec13003b708d768285aa6840e81eb
Related: OS#6945
Vadim Yanitskiy at

#26822 (Feb 5, 2026, 4:59:10 PM)

saip-tool: rename parser_tree correctly

parser_info is already defined and this seems to be a copy/paste
accident.

Change-Id: Icc30dbf02a266211fa4d3aee8e7cec14185e716c
lynxis at

#26821 (Feb 5, 2026, 4:59:08 PM)

pySim/global_platform: replace deprecated argument group() creation

The global platform code used install_cap_parser.add_mutually_exclusive_group().add_argument_group()
But calling add_argument_group() on an exclusive group was never an intended feature nor
according to python docs was a working feature.

Change-Id: I4f73d3417a12b7fe94e33a265cdae244f3c9a1e9
lynxis at

#26820 (Feb 5, 2026, 4:17: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

#26819 (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

#26818 (Feb 5, 2026, 2:47:41 PM)

hnbgw: expected-results.xml: Add missing TC_sccp_cr_limit

Change-Id: I4138cff311f82358f040290f3af483df8facc4cf
Pau Espin Pedrol at

#26817 (Feb 5, 2026, 2:47:13 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

#26816 (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

#26815 (Feb 5, 2026, 2:15:09 PM)

xua_default_lm_fsm: Move timer_cb further below

As usually done in osmo_fsm implemnetations.

Change-Id: Ibdc04d9ece0b3955da44849755a87ec28c17f140
Pau Espin Pedrol at

#26814 (Feb 5, 2026, 2:15:06 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

#26813 (Feb 5, 2026, 1:16:29 PM)

euicc: extend get_profiles_info to retrieve all known tags

get_profiles_info only request for the default tag list, but
not all tags.
Add --all to the function to request for all known tags.

Change-Id: Ia6878519a480bd625bb1fa2567c1fd2e0e89b071
lynxis at

#26812 (Feb 5, 2026, 1:16:26 PM)

euicc: get_profiles_info: add additional tags

Add definitions for ProfileOwner (decoded),
Notification Configuration Info, SM-DP+ proprietary data,
Profile Policy Rules.

Change-Id: I727dbe34d87a42bb3b526bd7a8accd687d20a208
lynxis at

#26811 (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

#26810 (Feb 5, 2026, 1:03:05 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

#26809 (Feb 5, 2026, 12:58:34 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

#26808 (Feb 5, 2026, 12:06:28 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

#26807 (Feb 5, 2026, 12:06:22 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

#26806 (Feb 5, 2026, 12:06:17 PM)

Document osmo_xua_layer_manager prim_cb

Change-Id: I1347c3538435985836ee5fe1d9dd42996e32ff94
Pau Espin Pedrol at

#26805 (Feb 5, 2026, 12:06:13 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

#26804 (Feb 5, 2026, 12:06:09 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

#26803 (Feb 5, 2026, 12:04:53 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

#26802 (Feb 5, 2026, 9:29:40 AM)

bts: f_verify_ramp_up(): fix RxLev / dBm mixup

Comparing RxLev and dBm values is comparing apples to oranges.  It's
just a lucky coincidence that fake_trx is using RF path loss value of
110 dB, which is also the offset between RxLev and dBm.

* Add `mp_rf_path_loss` matching the default value (110 dB) in fake_trx.
* Add `f_bts_max_rx_level_dbm()` calculating the expected Rx power level.
* Apply `rxlev2dbm()` on `l1_dl.dl_info.rx_level` whenever needed.
* Clarify the units in verdict / logging messages.

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

#26801 (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

#26800 (Feb 4, 2026, 2:45:28 PM)

fix wait time extension handling

wait time ext byte was mishandled as sw1 and sw2, which broke transfers that took a long time, i.e. crypto ops during esim interactions.

Closes: SYS#7869
Change-Id: I7527a4337ae857b9b2a4e982606fac770e677d73
ewild at

#26799 (Feb 4, 2026, 2:08:47 PM)

esim/http_json_api: add alternative API interface

unfortunately the API changes introduced in change

I277aa90fddb5171c4bf6c3436259aa371d30d092

broke the API interface of http_json_api.py. This was taken into
account and necessary to introduce add the server functionality next
to the already existing client functionality. The changes to the API
were minimal and all code locations that use http_json_api.py
were re-aligned.

Unfortunately it was not clear at this point in time that there are
out-of-tree projects that could be affected by API changes in
http_json_api.py

To mitigate the problem this patch introduces an alternative API
interface to the JsonHttpApiFunction base class. This alternative
API interface works like the old API interface when the class is
instantiated in the original way. To make use of the revised client
the API use has to pass an additional keyword argument that defines
the role.

Related: SYS#7866
Change-Id: I2a5d4b59b12e08d5eae7a1215814d3a69c8921f6
pmaier@sysmocom.de at

#26798 (Feb 4, 2026, 1:53:09 PM)

fix wait time extension handling

Change-Id: I7527a4337ae857b9b2a4e982606fac770e677d73
ewild at

#26797 (Feb 4, 2026, 1:27:42 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

#26796 (Feb 4, 2026, 1:26: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

#26795 (Feb 4, 2026, 1:11:31 PM)

esim/http_json_api: add alternative API interface

unfortunately the API changes introduced in change

I277aa90fddb5171c4bf6c3436259aa371d30d092

broke the API interface of http_json_api.py. This was taken into
account and necessary to introduce add the server functionality next
to the already existing client functionality. The changes to the API
were minimal and all code locations that use http_json_api.py
were re-aligned.

Unfortunately it was not clear at this point in time that there are
out-of-tree projects that could be affected by API changes in
http_json_api.py

To mitigate the problem this patch introduces an alternative API
interface to the JsonHttpApiFunction base class. This alternative
API interface works like the old API interface when the class is
instantiated in the original way. To make use of the revised client
the API use has to pass an additional keyword argument that defines
the role.

Related: SYS#7866
Change-Id: I2a5d4b59b12e08d5eae7a1215814d3a69c8921f6
pmaier@sysmocom.de at

#26794 (Feb 4, 2026, 12:50:30 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

#26793 (Feb 4, 2026, 12:45:43 PM)

esim/http_json_api: add alternative API interface

unfortunately the API changes introduced in change

I277aa90fddb5171c4bf6c3436259aa371d30d092

broke the API interface of http_json_api.py. This was taken into
account and necessary to introduce add the server functionality next
to the already existing client functionality. The changes to the API
were minimal and all code locations that use http_json_api.py
were re-aligned.

Unfortunately it was not clear at this point in time that there are
out-of-tree projects that could be affected by API changes in
http_json_api.py

To mitigate the problem this patch introduces an alternative API
interface to the JsonHttpApiFunction base class. This alternative
API interface works like the old API interface when the class is
instantiated in the original way. To make use of the revised client
the API use has to pass an additional keyword argument that defines
the role.

Related: SYS#7866
Change-Id: I2a5d4b59b12e08d5eae7a1215814d3a69c8921f6
pmaier@sysmocom.de at

#26792 (Feb 4, 2026, 12:33:40 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

#26791 (Feb 4, 2026, 12:33:36 PM)

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

Change-Id: I0cf13e091938db2b991156189bf4ff7c523e24da
Vadim Yanitskiy at

#26790 (Feb 4, 2026, 12:31:28 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

#26789 (Feb 4, 2026, 12:08:28 PM)

esim/http_json_api: add alternative API interface

unfortunately the API changes introduced in change

I277aa90fddb5171c4bf6c3436259aa371d30d092

broke the API interface of http_json_api.py. This was taken into
account and necessary to introduce add the server functionality next
to the already existing client functionality. The changes to the API
were minimal and all code locations that use http_json_api.py
were re-aligned.

Unfortunately it was not clear at this point in time that there are
out-of-tree projects that could be affected by API changes in
http_json_api.py

To mitigate the problem this patch introduces an alternative API
interface to the JsonHttpApiFunction base class. This alternative
API interface works like the old API interface when the class is
instantiated in the original way. To make use of the revised client
the API use has to pass an additional keyword argument that defines
the role.

Related: SYS#7866
Change-Id: I2a5d4b59b12e08d5eae7a1215814d3a69c8921f6
pmaier@sysmocom.de at

#26788 (Feb 4, 2026, 12:04:30 PM)

cosmetic: xua_rkm: Improve description of adding ASP to AS

Change-Id: I57c6a810e081b0968cf2dc24357214a4cebe533b
Pau Espin Pedrol at

#26787 (Feb 4, 2026, 12:03:09 PM)

cosmetic: xua_rkm: Improve description of adding ASP to AS

Change-Id: I57c6a810e081b0968cf2dc24357214a4cebe533b
Pau Espin Pedrol at

#26786 (Feb 4, 2026, 11:47:11 AM)

esim/http_json_api: add alternative API interface

unfortunately the API changes introduced in change

I277aa90fddb5171c4bf6c3436259aa371d30d092

broke the API interface of http_json_api.py. This was taken into
account and necessary to introduce add the server functionality next
to the already existing client functionality. The changes to the API
were minimal and all code locations that use http_json_api.py
were re-aligned.

Unfortunately it was not clear at this point in time that there are
out-of-tree projects that could be affected by API changes in
http_json_api.py

To mitigate the problem this patch introduces an alternative API
interface to the JsonHttpApiFunction base class. This alternative
API interface works like the old API interface when the class is
instantiated in the original way. To make use of the revised client
the API use has to pass an additional keyword argument that defines
the role.

Related: SYS#7866
Change-Id: I2a5d4b59b12e08d5eae7a1215814d3a69c8921f6
pmaier@sysmocom.de at

#26785 (Feb 4, 2026, 11:47:08 AM)

esim/http_json_api: add missing apidoc

Change-Id: Ibf9cf06197c9e3203c7a3ea5d77004f0ca41cd3f
pmaier@sysmocom.de at

#26784 (Feb 4, 2026, 11:37:29 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

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

cosmetic: Fix typo in comment

Change-Id: If5adb80baaae78cae7164e1f85c53195eafa6e3e
Pau Espin Pedrol at

#26782 (Feb 4, 2026, 11:15:06 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

#26781 (Feb 4, 2026, 9:44:25 AM)

xua_rkm: Add checks for ASP role in rx msg path

Change-Id: I672060c24571586b37102c7f7f60e4b0e20e07a9
Pau Espin Pedrol at

#26780 (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

#26779 (Feb 4, 2026, 8:41:12 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

#26778 (Feb 4, 2026, 7:23:59 AM)

bts: limit stderr logging to ERROR to avoid long write() to ext4 fs

Commit c3ab9ec33f37c6837fb8bcb0fa0bbd2e98781fb7 already decreased
verbosity to NOTICE, but that's not enough since we still get plenty of
logging and hence plenty of long write()s during test execution.

Let's try decreasing to ERROR and see if that's enough for now to
stabilize the tests.

Change-Id: I41982fd83a9f46609464afb6b7242240063d4d91
Pau Espin Pedrol at

#26777 (Feb 4, 2026, 7:20:32 AM)

smscb_peer_fsm: Replace printf with debug log

Change-Id: I026da3797a025d79f500f742e97139fbc5bbbcad
matan1008 at

#26776 (Feb 4, 2026, 7:20:29 AM)

Fix typos

Change-Id: I107154f0cc7c240ea143397a5f7b655cc48ee9b8
matan1008 at

#26775 (Feb 4, 2026, 7:20:26 AM)

sbcap: Remove duplicated cli connection destroy

Change-Id: I8809738955fb90e546b2adb8bb0722b15f464d26
matan1008 at

#26774 (Feb 3, 2026, 9:25:40 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

#26773 (Feb 3, 2026, 9:25:32 PM)

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

Change-Id: I5b3091b5ed96e28ae056272398c5eddbdef4b8b5
Vadim Yanitskiy at

#26772 (Feb 3, 2026, 9:23:30 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

#26771 (Feb 3, 2026, 7:19:23 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

#26770 (Feb 3, 2026, 6:09:00 PM)

bts: fix verdict string in f_verify_ramp_up()

Change-Id: I6e48c61ada7daa904734658709c1be384286041e
Vadim Yanitskiy at

#26769 (Feb 3, 2026, 6:08:51 PM)

bts: f_verify_ramp_up(): fix RxLev / dBm mixup

Comparing RxLev and dBm values is comparing apples to oranges.  It's
just a lucky coincidence that fake_trx is using RF path loss value of
110 dB, which is also the offset between RxLev and dBm.

* Add `mp_rf_path_loss` matching the default value (110 dB) in fake_trx.
* Add `f_bts_max_rx_level_dbm()` calculating the expected Rx power level.
* Apply `rxlev2dbm()` on `l1_dl.dl_info.rx_level` whenever needed.
* Clarify the units in verdict / logging messages.

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

#26768 (Feb 3, 2026, 6:08:39 PM)

bts: f_TC_acch_overpower(): use f_wait_ramp_up()

Change-Id: Id9b8bfc70cb26508e12ccd2b142bb458a3912c09
Vadim Yanitskiy at

#26767 (Feb 3, 2026, 4:45:44 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

#26766 (Feb 3, 2026, 4:45:41 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

#26765 (Feb 3, 2026, 4:45:37 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

#26764 (Feb 3, 2026, 4:45:31 PM)

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

The spec explicitly prohibits it.

Change-Id: I38bbd9226bad478f8068d02f7a4d7b3711596208
Pau Espin Pedrol at

#26763 (Feb 3, 2026, 4:45:27 PM)

m3ua: Allow rx SCON in IPSP role

Change-Id: I49838219aab912243a761ab9b5167095e363c72b
Pau Espin Pedrol at

#26762 (Feb 3, 2026, 4:44:50 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

#26761 (Feb 3, 2026, 4:43:26 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

#26760 (Feb 3, 2026, 12:38:22 PM)

RAN_Emulation: Assume SCCP peer available if rx BSSAP/RANAP Reset

This way we speed up tests, and also avoid extra verbosity by avoiding
receiving and transmitting extra RESET.

Change-Id: Id9020320b61d89720e17e1024b629f0227445266
Pau Espin Pedrol at

#26759 (Feb 3, 2026, 12:30:57 PM)

RAN_Emulation: Assume SCCP peer available if rx BSSAP/RANAP Reset

This way we speed up tests, and also avoid extra verbosity by avoiding
receiving and transmitting extra RESET.

Change-Id: Id9020320b61d89720e17e1024b629f0227445266
Pau Espin Pedrol at

#26758 (Feb 3, 2026, 12:30:09 PM)

RAN_Emulation: Assume SCCP peer available if rx BSSAP/RANAP Reset

This way we speed up tests, and also avoid extra verbosity by avoiding
receiving and transmitting extra RESET.

Change-Id: Id9020320b61d89720e17e1024b629f0227445266
Pau Espin Pedrol at

#26757 (Feb 3, 2026, 12:02:52 PM)

RAN_Emulation: Assume SCCP peer available if rx BSSAP/RANAP Reset

This way we speed up tests, and also avoid extra verbosity by avoiding
receiving and transmitting extra RESET.

Change-Id: Id9020320b61d89720e17e1024b629f0227445266
Pau Espin Pedrol at

#26756 (Feb 3, 2026, 11:35:13 AM)

hnbgw: Fix race condition in TC_stat_stp_sctp_disconnected

It can happen that first time check for sgsn/msc state they are still
connecting to stp (M3UA) or to ttcn3 process (SCCP/RANAP).
Use wait_converge=true to simply wait until they are conncted.

Change-Id: I15a6a9b9cf47f95d88bca75d0c6f88547f1dad40
Pau Espin Pedrol at

#26755 (Feb 3, 2026, 10:33:54 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

#26754 (Feb 3, 2026, 10:31:58 AM)

bts: f_verify_ramp_up(): fix RxLev / dBm mixup

Comparing RxLev and dBm values is comparing apples to oranges.  It's
just a lucky coincidence that fake_trx is using RF path loss value of
110 dB, which is also the offset between RxLev and dBm.

* Add `mp_rf_path_loss` matching the default value (110 dB) in fake_trx.
* Add `f_bts_max_rx_level_dbm()` calculating the expected Rx power level.
* Apply `rxlev2dbm()` on `l1_dl.dl_info.rx_level` whenever needed.
* Clarify the units in verdict / logging messages.

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

#26753 (Feb 3, 2026, 10:31:54 AM)

bts: fix verdict string in f_verify_ramp_up()

Change-Id: I6e48c61ada7daa904734658709c1be384286041e
Vadim Yanitskiy at

#26752 (Feb 3, 2026, 10:31:45 AM)

bts: f_TC_tx_power_ramp_adm_state_change(): drop unused last_rx_lvl

Change-Id: I9cddc84265a53cb4fab3d887881e080ffe484db4
Vadim Yanitskiy at

#26751 (Feb 3, 2026, 10:31:38 AM)

bts: f_TC_acch_overpower(): use f_wait_ramp_up()

Change-Id: Id9b8bfc70cb26508e12ccd2b142bb458a3912c09
Vadim Yanitskiy at

#26750 (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

#26749 (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

#26748 (Feb 3, 2026, 10:12:47 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

#26747 (Feb 3, 2026, 10:12:44 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

#26746 (Feb 3, 2026, 6:28:48 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

#26745 (Feb 2, 2026, 4:47:33 PM)

sanitize.opts: Add missing osmo-pcap project

Change-Id: I637215c325c28604c9e021dfac8d066238b9f38c
Pau Espin Pedrol at

#26744 (Feb 2, 2026, 4:41:44 PM)

server: wr_file: Request up to 8 iofd write buffers if available

Writing to disk is usually slower than handling network traffic, so it's
a desirable to increase write buffers to try to submit our write queue
to the kernel/VFS as fast as possible, to avoid it growing too much.
This should also improve CPU use at the expense of some dozen KBs of
extra use, which in the server should be plenty available.

Depends: libosmocore.git 378cf564c8859311415aa70adeb220cedbe56eb3
Change-Id: I167e5f9b7f9d5693b3df05f713288c741031c532
Pau Espin Pedrol at

#26743 (Feb 2, 2026, 3:36:53 PM)

deps/Makefile: Fetch M3UA/MTP3/SCCP back from upstream

Patches in our fork have been merged and hence we can point back to
upstream.

Related: OS#6907
Change-Id: I1bcc6ddcd9f55866965f12fd3771ce6a8659d141
Pau Espin Pedrol at

#26742 (Feb 2, 2026, 2:23:01 PM)

bsc: expected-results.xml: Add missing test BSC_Tests.TC_lcs_loc_req_without_smlc

Change-Id: Iebae79d8b70d1200b45b9f86b1e0d63b9c52b952
Pau Espin Pedrol at

#26741 (Feb 2, 2026, 1:58:13 PM)

bts: f_build_meas_res_tmpl(): expect specific L3 INFO

Change-Id: I1892d3ae3f72443ded6321487e9b191cd1948aac
Related: OS#6933
Vadim Yanitskiy at

#26740 (Feb 2, 2026, 1:58:10 PM)

library: make ts_MEAS_REP accept MeasurementResults

This reduces code duplication and makes ts_MEAS_REP easier to use.

Change-Id: I12113360f52b0ce09aa9bc11472fdd04bf14f368
Vadim Yanitskiy at

#26739 (Feb 2, 2026, 1:58:06 PM)

bts: f_est_dchan(): populate UL SACCH cache

This ensures that UL SACCH blocks always contain the expected content
and a proper L1 SACCH header, rather than the dummy measurement report
hard-coded in trxcon/firmware.  As a result, the BTS receives
consistent and realistic UL SACCH from the very beginning.

Change-Id: I4781fe7539e64e77d594e84f905646c127f46b64
Related: OS#6933
Vadim Yanitskiy at

#26738 (Feb 2, 2026, 1:58:03 PM)

bts: rename g_next_meas_res_nr / g_first_meas_res

These variables are used by as_rsl_meas_res() to track MEASurement
RESult PDUs on the A-bis/RSL link.  Clarify their names.

Change-Id: Iceb58bb636817afcd0fdf1eb3344d03153860a56
Related: OS#6933
Vadim Yanitskiy at

#26737 (Feb 2, 2026, 1:57:18 PM)

bts: f_est_dchan(): also reset g_rsl_meas_res_nr

This avoids unexpected failures if a dedicated channel is
established more than once by ConnHdlr.

Change-Id: Ia26413339c8c056e21661ae29bb2618b4a05ec70
Related: OS#6933
Vadim Yanitskiy at

#26736 (Feb 2, 2026, 1:56:57 PM)

bts: as_rsl_meas_res(): do not expect dummy UL SACCH

We're now populating the UL SACCH cache before establishing a
decicated channel in f_est_dchan(), so this special case is
no longer needed and can be safely removed.

Change-Id: I6eeee2876a76d41ab453af4c7724173fea773b83
Related: I4781fe7539e64e77d594e84f905646c127f46b64
Related: OS#6933
Vadim Yanitskiy at

#26735 (Feb 2, 2026, 1:56:46 PM)

bts: as_rsl_meas_res(): move chan_est to ConnHdlr

Altstep local variables are reset when another altstep, executed
among with as_rsl_meas_res(), repeats.  Move the chan_est variable
to ConnHdlr, so that it does not get reset.

Change-Id: I3a31532494e123935fb2aede0e67e4271962ab5f
Related: OS#6933
Vadim Yanitskiy at

#26734 (Feb 2, 2026, 12:40:36 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
Pau Espin Pedrol at

#26733 (Feb 2, 2026, 9:37:20 AM)

Lb: Handle N-PCSTATE.ind

Change-Id: I16900b9c2b840d4c7d8471c1f69b19601e892b2d
Pau Espin Pedrol at

#26732 (Feb 2, 2026, 9:37:16 AM)

Lb: Handle SCCP N-NOTICE.ind

Change-Id: I689bf2f2c4311fbc1da92f02c27078a1c00dda1a
Pau Espin Pedrol at

#26731 (Feb 2, 2026, 9:03:37 AM)

vty: Use osmo_fd_{write,read}_enable() API helper

Change-Id: Icba439fb33a29626ffce9ca1d61d30e88426f526
Pau Espin Pedrol at

#26730 (Feb 1, 2026, 5:35:17 PM)

compile_asn1_subdir: filter compiled files by .asn suffix

When I open the .asn file in vim, pySim should not attempt to read the
vim .swp file as asn.1.

  File "/home/moi/osmo-dev/src/pysim/pySim/esim/saip/__init__.py", line 45, in <module>
    asn1 = compile_asn1_subdir('saip')
[...]
  File "<frozen codecs>", line 325, in decode
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xad in position 21: invalid start byte

Related: OS#6937
Change-Id: I37df3fc081e51e2ed2198876c63f6e68ecc8fcd8
Neels Hofmeyr at

#26725 (Jan 31, 2026, 10:59:05 AM)

http_json_api: Only require Content-Type if response body is non-empty

If there is an empty body returned, such as in the case of the response
to an es9p notification, then it is of course also legal to not set the
content-type header.

This patch fixes an exception when talking to certain SM-DP+ with
es9p_client.py:

DEBUG:pySim.esim.http_json_api:HTTP RSP-STS: [204] hdr: {'X-Admin-Protocol': 'gsma/rsp/v2.5.0', 'Date': 'Wed, 28 Jan 2026 18:26:39 GMT', 'Server': 'REDACTED'}
DEBUG:pySim.esim.http_json_api:HTTP RSP: b''
{'X-Admin-Protocol': 'gsma/rsp/v2.5.0', 'Date': 'Wed, 28 Jan 2026 18:26:39 GMT', 'Server': 'REDACTED'}
<Response [204]>
Traceback (most recent call last):
  File "gprojects/git/pysim/es9p/../contrib/es9p_client.py", line 315, in <module>
    c.do_notification()
    ~~~~~~~~~~~~~~~~~^^
  File "projects/git/pysim/es9p/../contrib/es9p_client.py", line 159, in do_notification
    res = self.peer.call_handleNotification(data)
  File "projects/git/pysim/contrib/pySim/esim/es9p.py", line 174, in call_handleNotification
    return self.handleNotification.call(data)
           ~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^
  File "projects/git/pysim/contrib/pySim/esim/http_json_api.py", line 335, in call
    if not response.headers.get('Content-Type').startswith(req_headers['Content-Type']):
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
AttributeError: 'NoneType' object has no attribute 'startswith'

Change-Id: I99e8f167b7bb869c5ff6d908ba673dac87fef71a
laforge at

#26724 (Jan 31, 2026, 10:54:07 AM)

rest_api: Fix encoded payload length check

Change-Id: I4224102dd924dfded59e3a489079d02ca0237983
matan1008 at

#26723 (Jan 31, 2026, 1:24:28 AM)

es9p_client: MAke install notification code execute at all

The caller specified 'install' but the do_notification() function
compared with 'download' :(

Change-Id: I2d441cfbc1457688eb163301d3d91a1f1fdc7a8c
laforge at

#26722 (Jan 31, 2026, 1:24:20 AM)

es9p_client: Fix type conversion in installation result notification

The asn.1 encoder expects bytes-like objects, we cannot simply pass
hex-strings to it without conversion

Change-Id: I83ad047e043dc6b3462b188ce6dd0b2cc0e52e87
laforge at

#26721 (Jan 30, 2026, 9:25:50 PM)

osmo-ns-master: drop python3-osmopy-utils / --enable-external-tests

--enable-external-tests requires python3-osmopy-utils, however this
package is no longer available for debian:10.  We're not running
tests, so it's not really needed.  Removing it fixes ttcn3-ns-test-fr.

Change-Id: I342099be87175dfe189a8906b53ee26328c0a417
Vadim Yanitskiy at

#26720 (Jan 30, 2026, 6:23:33 PM)

bsc: Don't start virtual SMLC in TC_lcs_loc_req_without_smlc

The SMLC is not needed at all in that test. In fact, we want it to not
be available. Starting it now within that test, where the BSC Lb link is
teared down (f_vty_enable_smlc(false)) may create race conditions where
the SMLC ttcn3 code (BSSMAP_LE_Emulation) will try to get the RESET
procedure ongoing, which the BSC SCCP stack may reject (SCCP UDTS) due
to the SCCP User being unbound during the VTY command above to disable
the Lb Link.

Change-Id: Idb98e4d907feaafdaf3f5bf044c0c50b6d943d01
Pau Espin Pedrol at

#26719 (Jan 30, 2026, 6:02:44 PM)

Lb: Log stop of Lb link

Change-Id: If8537874cf6b70791aa0fee9f1c94b472113ccf6
Pau Espin Pedrol at

#26718 (Jan 30, 2026, 5:55:07 PM)

sccp_scrc: Improve logging unable to find SCCP user

Change-Id: I9277624a260ee2f94f8cd059211aff53cfb50574
Pau Espin Pedrol at

#26717 (Jan 30, 2026, 5:30:04 PM)

Lb: Handle N-PCSTATE.ind

Change-Id: I16900b9c2b840d4c7d8471c1f69b19601e892b2d
Pau Espin Pedrol at

#26716 (Jan 30, 2026, 5:29:57 PM)

Lb: Handle SCCP N-NOTICE.ind

Change-Id: I689bf2f2c4311fbc1da92f02c27078a1c00dda1a
Pau Espin Pedrol at

#26715 (Jan 30, 2026, 4:10:31 PM)

sccp_scrc: Log Point code in integer format too

Change-Id: I9277624a260ee2f94f8cd059211aff53cfb50574
Pau Espin Pedrol at

#26714 (Jan 30, 2026, 2:34:28 PM)

osmo_io: Remove outdated comment in API doc of osmo_iofd_set_io_buffers()

Multiple iov buffers are supported in poll backend since
4272cd46b1e5b264e6f6b65d38bcb08e3a139a9e.

Related: OS#6705
Change-Id: I9b75f3597081c6cd7e24f75f0e289b93edb3aa86
Pau Espin Pedrol at

#26713 (Jan 30, 2026, 2:34:24 PM)

logging_file: Request up to 8 iofd write buffers if available

This should help in decreasing latency between submitting a logging line
and getting it written to file. It should, for the same reason, optimize
CPU use.

Change-Id: Ia88b27948922d278e0f72fc2aac4b4ae88465b4d
Pau Espin Pedrol at

#26712 (Jan 30, 2026, 2:34:19 PM)

Implement log file target using osmo_io

Reuse (struct log_target)->tgt_file->wqueue->except_cb to store the iofd
pointer internally, since we are not allowed to change the struct
log_target because it's public and we don't want to break the ABI.
Using the wqueue except_cb is fine since that field was never used.

Related: OS#6918
Change-Id: Ieb6420246454ef59442b1fd7b1d14e2c00fa69a5
Pau Espin Pedrol at

#26711 (Jan 30, 2026, 2:34:16 PM)

Use same queue length for gsmtap_log and gsmtap_file

Take the chance to also deduplicate MAX_LOG_SIZE.

Change-Id: I3772d291f97626ee325731f3515a5110eda70d3d
Pau Espin Pedrol at

#26710 (Jan 30, 2026, 2:32:42 PM)

osmo_io: Allow fetching maximum value allowed by osmo_iofd_set_io_buffers()

Before this patch, there's no way for a user of the API to know whether
a requested buffers value is actually going to be accepted or not.

Change-Id: Id3d8413c119eb3d9b60aa068295a59561236938c
Pau Espin Pedrol at

#26709 (Jan 30, 2026, 2:07:37 PM)

Implement log file target using osmo_io

Reuse (struct log_target)->tgt_file->wqueue->except_cb to store the iofd
pointer internally, since we are not allowed to change the struct
log_target because it's public and we don't want to break the ABI.
Using the wqueue except_cb is fine since that field was never used.

Related: OS#6918
Change-Id: Ieb6420246454ef59442b1fd7b1d14e2c00fa69a5
Pau Espin Pedrol at

#26708 (Jan 30, 2026, 2:07:26 PM)

Use same queue length for gsmtap_log and gsmtap_file

Take the chance to also deduplicate MAX_LOG_SIZE.

Change-Id: I3772d291f97626ee325731f3515a5110eda70d3d
Pau Espin Pedrol at

#26707 (Jan 30, 2026, 2:07:17 PM)

osmo_io: Introduce API osmo_iofd_get_txqueue_max_length()

Change-Id: I92526aa554fc87734fae3fac0ad650d17bf52bb5
Pau Espin Pedrol at

#26706 (Jan 30, 2026, 2:05:27 PM)

logging_file: Clean log_target_file_reopen()

Move specific assert for wq further below.
Do early return to get rid of extra indentation.

Change-Id: Ibcb50320ad80b034115cccc3b7ab90501ac1d091
Pau Espin Pedrol at

#26705 (Jan 30, 2026, 1:59:43 PM)

Implement log file target using osmo_io

Reuse (struct log_target)->tgt_file->wqueue->except_cb to store the iofd
pointer internally, since we are not allowed to change the struct
log_target because it's public and we don't want to break the ABI.
Using the wqueue except_cb is fine since that field was never used.

Related: OS#6918
Change-Id: Ieb6420246454ef59442b1fd7b1d14e2c00fa69a5
Pau Espin Pedrol at

#26704 (Jan 30, 2026, 1:59:33 PM)

Use same queue length for gsmtap_log and gsmtap_file

Take the chance to also deduplicate MAX_LOG_SIZE.

Change-Id: I3772d291f97626ee325731f3515a5110eda70d3d
Pau Espin Pedrol at

#26703 (Jan 30, 2026, 1:59:28 PM)

logging_file: Clean log_target_file_reopen()

Move specific assert for wq further below.
Do early return to get rid of extra indentation.

Change-Id: Ibcb50320ad80b034115cccc3b7ab90501ac1d091
Pau Espin Pedrol at

#26702 (Jan 30, 2026, 1:59:19 PM)

logging: Also Avoid infinite loop/deadlock in log_check_level()

A LOG() macro being called inside an already-logging path will first
call log_check_level() before calling osmo_vlogp(). Since calling
happens with the mutex hold, it has been seen to deadlock in eg.
osmo-hnbgw.

Change-Id: I0098629b335b3aa174b49fd79c33d22b04bc4785
Pau Espin Pedrol at

#26701 (Jan 30, 2026, 1:59:13 PM)

logging_file: Clean log_target_file_reopen()

Move specific assert for wq further below.
Do early return to get rid of extra indentation.

Change-Id: Ibcb50320ad80b034115cccc3b7ab90501ac1d091
Pau Espin Pedrol at

#26700 (Jan 30, 2026, 1:59:01 PM)

logging: Also Avoid infinite loop/deadlock in log_check_level()

A LOG() macro being called inside an already-logging path will first
call log_check_level() before calling osmo_vlogp(). Since calling
happens with the mutex hold, it has been seen to deadlock in eg.
osmo-hnbgw.

Change-Id: I0098629b335b3aa174b49fd79c33d22b04bc4785
Pau Espin Pedrol at

#26699 (Jan 30, 2026, 1:58:32 PM)

Use same queue length for gsmtap_log and gsmtap_file

Take the chance to also deduplicate MAX_LOG_SIZE.

Change-Id: I3772d291f97626ee325731f3515a5110eda70d3d
Pau Espin Pedrol at

#26698 (Jan 30, 2026, 1:52:11 PM)

Implement log file target using osmo_io

Reuse (struct log_target)->tgt_file->wqueue->except_cb to store the iofd
pointer internally, since we are not allowed to change the struct
log_target because it's public and we don't want to break the ABI.
Using the wqueue except_cb is fine since that field was never used.

Related: OS#6918
Change-Id: Ieb6420246454ef59442b1fd7b1d14e2c00fa69a5
Pau Espin Pedrol at

#26697 (Jan 30, 2026, 1:26:30 PM)

vty: Use osmo_fd_{write,read}_enable() API helper

Change-Id: Icba439fb33a29626ffce9ca1d61d30e88426f526
Pau Espin Pedrol at

#26696 (Jan 30, 2026, 11:28:24 AM)

Fix 'logging: Avoid infinite loop logging inside logging path'

I didn't see the early return of log_cache_check(), which should leave
the logging_active variable as true forever.

Fixes: bc400626b28c85fe0f52ce25947a90650b0d06b5
Change-Id: I13ed182688597c7da279a50bf057eff6d13f0867
Pau Espin Pedrol at

#26695 (Jan 30, 2026, 11:22:07 AM)

RAN_Emulation: Handle N-PCSTATE.ind to wait for peer availability

Take the chance to explicitly log and discard other .ind primitives
which would otherwise block the processing of messages.

Change-Id: I86b481fca9b7be84f3cda9fbce83e60820fe7fc1
Related: OS#6907
Pau Espin Pedrol at

#26694 (Jan 30, 2026, 9:51:42 AM)

logging_file: Clean log_target_file_reopen()

Move specific assert for wq further below.
Do early return to get rid of extra indentation.

Change-Id: Ibcb50320ad80b034115cccc3b7ab90501ac1d091
Pau Espin Pedrol at

#26693 (Jan 30, 2026, 9:51:33 AM)

Use same queue length for gsmtap_log and gsmtap_file

Take the chance to also deduplicate MAX_LOG_SIZE.

Change-Id: I3772d291f97626ee325731f3515a5110eda70d3d
Pau Espin Pedrol at

#26692 (Jan 30, 2026, 9:51:01 AM)

Implement log file target using osmo_io

Reuse (struct log_target)->tgt_file->wqueue->except_cb to store the iofd
pointer internally, since we are not allowed to change the struct
log_target because it's public and we don't want to break the ABI.
Using the wqueue except_cb is fine since that field was never used.

Related: OS#6918
Change-Id: Ieb6420246454ef59442b1fd7b1d14e2c00fa69a5
Pau Espin Pedrol at

#26691 (Jan 30, 2026, 9:46:56 AM)

logging: Avoid infinite loop logging inside logging path

If eg. gsmtap_log target is requested to log a message but the iofd
wqueue is full, it may try to log an error message, which will create an
infinite stack loop.

Change-Id: If3b8c0ee97537242162558fdd1c99f03b32af811
Pau Espin Pedrol at

#26690 (Jan 29, 2026, 11:59:02 PM)

pySim-trace: pySim.apdu_source.stdin_hex

This introduces an "APDU source" for pySim-trace which enables the
decoding of APDUs that are copy+pasted from elsewhere, for example
APDU logs in text form created by proprietary tools, or to decode
personalization scripts or the like.

Change-Id: I5aacf13b7c27cea9efd42f01dacca61068c3aa33
laforge at

#26689 (Jan 29, 2026, 6:16:35 PM)

Osmocom_Types: Add API ro_integer_get_first_pos()

It is sometimes useful to find out the position of the 1st item (only
one if the list is expected to be a set of unique items), in order to
update extra state on an external list.t

Change-Id: Id70b2c7d6bf702489de03aed1c389ae892aee835
Pau Espin Pedrol at

#26688 (Jan 29, 2026, 6:16:30 PM)

smlc: Drop unused port BSSAP_LE in test_CT

Change-Id: If9e45e890d595f6ee837b30b947456bcf39f67c1
Pau Espin Pedrol at

#26687 (Jan 29, 2026, 6:16:18 PM)

stp: Handle N-PCSTATE.ind in STP_Tests_TCAP.ttcn

Make sure none of the peers we want to talk to is explicitly announced
as unavailable before starting the test.

Related: OS#6907
Change-Id: Ie1beb2cd69ce1847f3b3bd9917b42a2acaef57c8
Pau Espin Pedrol at

#26686 (Jan 29, 2026, 6:16:00 PM)

cosmetic: library/BSSAP_CodecPort.ttcn: Fix trailing whitespace

Change-Id: I3bbb035eda0690a862989a0ec4bda265b506db3a
Pau Espin Pedrol at

#26685 (Jan 29, 2026, 6:15:49 PM)

BSSAP_LE_Emulation: Handle N-PCSTATE.ind to wait for peer availability

Take the chance to explicitly log and discard other .ind primitives
which would otherwise block the processing of messages.

Related: OS#6907
Change-Id: I6a40d1ddcd3a7dbde9f6c8b51439e9ab4d1da469
Pau Espin Pedrol at

#26684 (Jan 29, 2026, 6:15:33 PM)

RAN_Emulation: Handle N-PCSTATE.ind to wait for peer availability

Take the chance to explicitly log and discard other .ind primitives
which would otherwise block the processing of messages.

Change-Id: I86b481fca9b7be84f3cda9fbce83e60820fe7fc1
Related: OS#6907
Pau Espin Pedrol at

#26683 (Jan 29, 2026, 2:10:59 PM)

tests/pySim-smpp2sim_test: add integration test

At the moment pySim.ota codebase is not covered by any of the
integration tests (we have only normal unittests so far). To
increase the test coverage, let's add an integration test that
sends exchanges an RFM OTA-SMS with a real-world card.

However, there is no tool avaliable that can be used as an SMPP
client for pySim-smpp2sim yet. Let's use smpp_ota_apdu2.py on
laforge/ota to develop a tool that we can use to exchange SMS-TPDUs
that contain remote APDU scripts (RFM/RAM).

Finally let's use the tool we have created as a basis to create
an integration test that exchanges an SMS-TPDU with the RFM
application of a sysmoISIM-SJA5 card. The testcase shall pass
when we get the expected response from the card.

Related: OS#6868
Change-Id: If25e38be004cc1c7aeeb130431831377e78fe28d
pmaier@sysmocom.de at

#26682 (Jan 29, 2026, 1:21:17 PM)

Revert "testenv: less cluttered output for failed cmds"

This reverts commit 648954ff1ab94620833b484d8131d001c61faa78.

Change-Id: I84f954e7f7d6c3b8051d29d8fc20060d7075852c
Related: OS#6935
Pau Espin Pedrol at

#26681 (Jan 29, 2026, 11:43:41 AM)

ttcn3-bts-test: fail on unexpected respawn count

Suggested-by: Pau Espin Pedrol <pespin@sysmocom.de>
Change-Id: Idd9f8dcf1a7186a0715c1026da44f404c1c574d9
Oliver Smith at

#26680 (Jan 29, 2026, 11:30:37 AM)

repo-install-test: debian 10: osmo-gbproxy only

The debian 10 repository has been officially disabled:
https://osmocom.org/news/308

However we just re-enabled a subset of the packages, osmo-gbproxy +
dependencies, because currently they are relevant for a customer. Adjust
the repo-install-test to deal with this subset of packages for debian 10
to fix that it is currently failing.

I have verified that repo-install-test works with this change for debian
10, 11 and 12. It currently doesn't run for debian 13 yet (OS#6934).

Related: SYS#7859
Change-Id: Id8d8cda8e399719f06aeb1843eb8f5ab12a90e8f
Oliver Smith at

#26679 (Jan 29, 2026, 11:29:31 AM)

repo-install-test: debian 10: osmo-gbproxy only

The debian 10 repository has been officially disabled:
https://osmocom.org/news/308

However we just re-enabled a subset of the packages, osmo-gbproxy +
dependencies, because currently they are relevant for a customer. Adjust
the repo-install-test to deal with this subset of packages for debian 10
to fix that it is currently failing.

I have verified that repo-install-test works with this change for debian
10, 11 and 12. It currently doesn't run for debian 13 yet (OS#6934).

Related: SYS#7859
Change-Id: Id8d8cda8e399719f06aeb1843eb8f5ab12a90e8f
Oliver Smith at

#26678 (Jan 29, 2026, 11:20:41 AM)

Use same queue length for gsmtap_log and gsmtap_file

Take the chance to also deduplicate MAX_LOG_SIZE.

Change-Id: I3772d291f97626ee325731f3515a5110eda70d3d
Pau Espin Pedrol at

#26677 (Jan 29, 2026, 11:17:38 AM)

Use same queue length for gsmtap_log and gsmtap_file

Change-Id: I3772d291f97626ee325731f3515a5110eda70d3d
Pau Espin Pedrol at

#26676 (Jan 29, 2026, 11:08:24 AM)

stats_tcp.c: Remove unneeded EMBEDDED check

The HAVE_LINUX_TCP define check should be enough.

Change-Id: I68cb49925aa49ad97b266638d41f38c22fc32000
Pau Espin Pedrol at

#26675 (Jan 29, 2026, 11:08:19 AM)

logging_file: Avoid reopening file for stderr

target->tgt_file.fname is NULL for stderr log target.

Change-Id: I4a551b0c434c480e78852a0a4873700eac2f5853
Pau Espin Pedrol at

#26674 (Jan 29, 2026, 11:08:12 AM)

logging_file: Clean log_target_file_reopen()

Move specific assert for wq further below.
Do early return to get rid of extra indentation.

Change-Id: Ibcb50320ad80b034115cccc3b7ab90501ac1d091
Pau Espin Pedrol at

#26673 (Jan 29, 2026, 11:07:49 AM)

Implement log file target using osmo_io

Reuse (struct log_target)->tgt_file->wqueue->except_cb to store the iofd
pointer internally, since we are not allowed to change the struct
log_target because it's public and we don't want to break the ABI.
Using the wqueue except_cb is fine since that field was never used.

Related: OS#6918
Change-Id: Ieb6420246454ef59442b1fd7b1d14e2c00fa69a5
Pau Espin Pedrol at

#26672 (Jan 29, 2026, 11:06:19 AM)

logging: Avoid infinite loop logging inside logging path

If eg. gsmtap_log target is requested to log a message but the iofd
wqueue is full, it may try to log an error message, which will create an
infinite stack loop.

Change-Id: If3b8c0ee97537242162558fdd1c99f03b32af811
Pau Espin Pedrol at

#26671 (Jan 29, 2026, 11:03:28 AM)

logging_file: Fix log_target_file_switch_to_stream on stderr

In stderr log target, the bfd of the wq was left registered despite
freeing the wq, which ended up in the callback being called and the
freed wq being used.

Change-Id: I1c0d833fb8ae82d1dd54e44cc2fc8be80d5e1b4b
Pau Espin Pedrol at

#26670 (Jan 29, 2026, 10:55:12 AM)

Implement log file target using osmo_io

Reuse (struct log_target)->tgt_file->wqueue->except_cb to store the iofd
pointer internally, since we are not allowed to change the struct
log_target because it's public and we don't want to break the ABI.
Using the wqueue except_cb is fine since that field was never used.

Related: OS#6918
Change-Id: Ieb6420246454ef59442b1fd7b1d14e2c00fa69a5
Pau Espin Pedrol at

#26669 (Jan 29, 2026, 10:54:10 AM)

logging: Avoid infinite loop logging inside logging path

If eg. gsmtap_log target is requested to log a message but the iofd
wqueue is full, it may try to log an error message, which will create an
infinite stack loop.

Change-Id: If3b8c0ee97537242162558fdd1c99f03b32af811
Pau Espin Pedrol at

#26668 (Jan 29, 2026, 10:38:50 AM)

core: always build tun.c and gate TUN support by headers

Always build tun.c and move platform-specific checks into the
implementation.

Guard the TUN-specific code paths based on the availability of
linux/if_tun.h detected at configure time. If TUN support is not
available, osmo_tundev_open() returns -ENOTSUP.

This keeps the public TUN API available while disabling unsupported
functionality in a capability-based way.

Change-Id: I6d1ea1644d12ef59a54cf2f73b9155def58b17a9
dtv.comp at

#26667 (Jan 29, 2026, 10:23:38 AM)

repo-install-test: debian 10: osmo-gbproxy only

The debian 10 repository has been officially disabled:
https://osmocom.org/news/308

However we just re-enabled a subset of the packages, osmo-gbproxy +
dependencies, because currently they are relevant for a customer. Adjust
the repo-install-test to deal with this subset of packages for debian 10
to fix that it is currently failing.

I have verified that repo-install-test works with this change for debian
10, 11 and 12. It currently doesn't run for debian 13 yet (OS#6934).

Related: SYS#7859
Change-Id: Id8d8cda8e399719f06aeb1843eb8f5ab12a90e8f
Oliver Smith at

#26666 (Jan 29, 2026, 10:23:35 AM)

scripts/repo-install-test: test osmo-pfcp-tool in latest

osmo-pfcp-tool is available in latest for quite some time now, so adjust
the check.

Related: osmo-upf Icf4bb566d9b627ead370174e92629a9fccde755e
Change-Id: Icca5a31270bca03596be8ed0104bfb7143fb1ede
Oliver Smith at

#26665 (Jan 29, 2026, 9:48:10 AM)

logging_file: Clean log_target_file_reopen()

Move specific assert for wq further below.
Do early return to get rid of extra indentation.

Change-Id: Ibcb50320ad80b034115cccc3b7ab90501ac1d091
Pau Espin Pedrol at

#26664 (Jan 29, 2026, 9:47:40 AM)

logging_file: Fix log_target_file_switch_to_stream on stderr

In stderr log target, the bfd of the wq was left registered despite
freeing the wq, which ended up in the callback being called and the
freed wq being used.

Change-Id: I1c0d833fb8ae82d1dd54e44cc2fc8be80d5e1b4b
Pau Espin Pedrol at

#26663 (Jan 29, 2026, 7:49:01 AM)

Modified to dynamically adjust the returned QoS length to ensure compatibility with older modules.

Related: OS#6922
Change-Id: I872d882de4ce186f644b1b3ab684963050709d4f
canghaiwuhen at

#26662 (Jan 28, 2026, 10:35:53 PM)

es9p_client: Fix type conversion in installation result notification

The asn.1 encoder expects bytes-like objects, we cannot simply pass
hex-strings to it without conversion

Change-Id: I83ad047e043dc6b3462b188ce6dd0b2cc0e52e87
laforge at

#26661 (Jan 28, 2026, 10:35:51 PM)

es9p_client: MAke install notification code execute at all

The caller specified 'install' but the do_notification() function
compared with 'download' :(

Change-Id: I2d441cfbc1457688eb163301d3d91a1f1fdc7a8c
laforge at

#26660 (Jan 28, 2026, 10:35:48 PM)

es9p_client: smdpOid is optional in download/install notification

See the following definition in the ASN.1:

ProfileInstallationResultData ::= [39] SEQUENCE { -- Tag 'BF27'
    transactionId[0] TransactionId, -- The TransactionID generated by the SM-DP+
    notificationMetadata[47] NotificationMetadata,
    smdpOid OBJECT IDENTIFIER OPTIONAL, -- SM-DP+ OID (same value as in CERT.DPpb.ECDSA)
    finalResult [2] CHOICE {
        successResult SuccessResult,
        errorResult ErrorResult
    }
}

Change-Id: I5df54df2ddc0590a5eca31d4f37ae94053d20067
laforge at

#26659 (Jan 28, 2026, 5:18:42 PM)

logging_file: Clean log_target_file_reopen()

Move specific assert for wq further below.
Do early return to get rid of extra indentation.

Change-Id: Ibcb50320ad80b034115cccc3b7ab90501ac1d091
Pau Espin Pedrol at

#26658 (Jan 28, 2026, 5:17:23 PM)

Implement log file target using osmo_io

Reuse (struct log_target)->tgt_file->wqueue->except_cb to store the iofd
pointer internally, since we are not allowed to change the struct
log_target because it's public and we don't want to break the ABI.
Using the wqueue except_cb is fine since that field was never used.

Related: OS#6918
Change-Id: Ieb6420246454ef59442b1fd7b1d14e2c00fa69a5
Pau Espin Pedrol at

#26657 (Jan 28, 2026, 4:49:48 PM)

logging_file: Avoid reopning file for stderr

target->tgt_file.fname is NULL for stderr log target.

Change-Id: I4a551b0c434c480e78852a0a4873700eac2f5853
Pau Espin Pedrol at

#26656 (Jan 28, 2026, 3:53:35 PM)

contrib/csv-to-pgsql: add missing copyright header

Change-Id: Iad8b2c1abb6a80764d05c823fbd03a9eae0ec0ab
pmaier@sysmocom.de at

#26655 (Jan 28, 2026, 3:51:18 PM)

RAN_Emulation: Handle N-PCSTATE.ind to wait for peer availability

Take the chance to explicitly log and discard other .ind primitives
which would otherwise block the processing of messages.

Change-Id: I86b481fca9b7be84f3cda9fbce83e60820fe7fc1
Related: OS#6907
Pau Espin Pedrol at

#26654 (Jan 28, 2026, 3:51:13 PM)

BSSAP_LE_Emulation: Handle N-PCSTATE.ind to wait for peer availability

Take the chance to explicitly log and discard other .ind primitives
which would otherwise block the processing of messages.

Related: OS#6907
Change-Id: I6a40d1ddcd3a7dbde9f6c8b51439e9ab4d1da469
Pau Espin Pedrol at

#26653 (Jan 28, 2026, 3:32:57 PM)

cosmetic: library/BSSAP_CodecPort.ttcn: Fix trailing whitespace

Change-Id: I3bbb035eda0690a862989a0ec4bda265b506db3a
Pau Espin Pedrol at

#26652 (Jan 28, 2026, 3:32:51 PM)

smlc: Drop unused port BSSAP_LE in test_CT

Change-Id: If9e45e890d595f6ee837b30b947456bcf39f67c1
Pau Espin Pedrol at

#26651 (Jan 28, 2026, 3:32:45 PM)

BSSAP_LE_Emulation: Handle N-PCSTATE.ind to wait for peer availability

Take the chance to explicitly log and discard other .ind primitives
which would otherwise block the processing of messages.

Related: OS#6907
Change-Id: I6a40d1ddcd3a7dbde9f6c8b51439e9ab4d1da469
Pau Espin Pedrol at

#26650 (Jan 28, 2026, 3:32:29 PM)

RAN_Emulation: Handle N-PCSTATE.ind to wait for peer availability

Take the chance to explicitly log and discard other .ind primitives
which would otherwise block the processing of messages.

Change-Id: I86b481fca9b7be84f3cda9fbce83e60820fe7fc1
Related: OS#6907
Pau Espin Pedrol at

#26649 (Jan 28, 2026, 2:47:14 PM)

jobs/gerrit: debian10 for osmo-gbproxy + deps

Related: SYS#7859
Change-Id: I7ad3412d945de8c29b6ab62fcadfd2f231c19581
Oliver Smith at

#26648 (Jan 28, 2026, 12:37:42 PM)

jobs/gerrit: debian10 for osmo-gbproxy + deps

Related: SYS#7859
Change-Id: I7ad3412d945de8c29b6ab62fcadfd2f231c19581
Oliver Smith at

#26647 (Jan 28, 2026, 12:23:36 PM)

stp: Handle N-PCSTATE.ind in STP_Tests_TCAP.ttcn

Make sure none of the peers we want to talk to is explicitly announced
as unavailable before starting the test.

Related: OS#6907
Change-Id: Ie1beb2cd69ce1847f3b3bd9917b42a2acaef57c8
Pau Espin Pedrol at

#26646 (Jan 28, 2026, 12:23:33 PM)

Expect and discard N-PCSTATE.ind with newer SCCP_Emulation

Newer titan.ProtocolEmulations.SCCP will generate N-PCSTATE.ind when
needed. Since our tests written so far don't expect those (yet), discard
them at the port level so the indications don't interfere with it.
Work to enable them will be done in follow-up patches.

Related: OS#6907
Change-Id: I532b9f839ab2c08e707fbd63a1e1058253f79b6c
Pau Espin Pedrol at

#26645 (Jan 28, 2026, 12:23:29 PM)

Osmocom_Types: Add API ro_integer_get_first_pos()

It is sometimes useful to find out the position of the 1st item (only
one if the list is expected to be a set of unique items), in order to
update extra state on an external list.t

Change-Id: Id70b2c7d6bf702489de03aed1c389ae892aee835
Pau Espin Pedrol at

#26644 (Jan 28, 2026, 12:23:20 PM)

Use newer M3UA & MTP3 deps generating MTP-STATUS,PAUSE,RESUME.ind

* titan.TestPorts.MTP3asp pointer is changed to osmocom fork containing
  extra patch adding missing fields to MTP-STATUS,PAUSE,RESUME records.
  It also adds templates for them.
* titan.ProtocolEmulations.M3UA pointer is changed to osmocom fork
  containing extra patch improving M3UA_Emulation component to build
  MTP-STATUS,PAUSE,RESUME.ind primiives when receiving DAVA/DUNA/DUPU/SCON
  from M3UA link.

The upper layers building on top of MTP3asp_PT (ie. port MTP3asp_SCCP_PT
from SCCP_MApping.ttcnp) are fine because they explicitly discard
ASP_MTP3_PAUSE,RESUME,STATUS messages in the port defintion.
Hence, supporting those in SCCP layer is left as a subsequent task.

Related: OS#6907
Change-Id: I67cc2bcf3395a81fa8acee861af01e752984ebb3
Pau Espin Pedrol at

#26643 (Jan 28, 2026, 11:28:56 AM)

jobs: disable ttcn3-gbproxy-test-fr

The job is known to be broken in its current form, so disable it for now
to avoid having failure mails every day about it.

Related: SYS#7859
Change-Id: I15fcb4fd1f145bd913456ac08356e9fa65e34269
Oliver Smith at

#26642 (Jan 28, 2026, 11:20:59 AM)

pySimLogger: user __name__ of the module when creating a new logger

At the moment we use random identifiers as names when we create a
new logger for pySimLogger. Let's switch to consistently use the
module name here. For the top level modules let's use the program
name so that it will show up in the log instead of __init__.

Change-Id: I49a9beb98845f66247edd42ed548980c97a7151a
pmaier@sysmocom.de at

#26641 (Jan 28, 2026, 11:20:55 AM)

transport/init: use PySimLogger to print messages

The module still uses print to output information. Let's replace
those print calls with the more modern PySimLogger method calls.

Change-Id: I2e2ec2b84f3b84dbd8a029ae9bb64b7a96ddbde3
pmaier@sysmocom.de at

#26640 (Jan 28, 2026, 10:11:30 AM)

ttcn3-gbproxy-test-fr: don't use old libosmocore

Fix that we are currently building osmo-gbproxy against an old
libosmocore in ttcn3-gbproxy-test-fr. This is currently causing the job
to fail with:

  /usr/bin/ld: gb_proxy_vty.o: in function `log_set_bvc_filter':
  /tmp/osmo-gbproxy/src/gb_proxy_vty.c:477: undefined reference to `log_set_filter'
  /usr/bin/ld: /tmp/osmo-gbproxy/src/gb_proxy_vty.c:478: undefined reference to `log_set_filter_data'
  collect2: error: ld returned 1 exit status

Related: libosmocore Ie48e7e635feb91509b9c034394df4fb16cb931a3
Change-Id: I15fcb4fd1f145bd913456ac08356e9fa65e34269
Oliver Smith at

#26639 (Jan 27, 2026, 3:52:36 PM)

Modified to dynamically adjust the returned QoS length to ensure compatibility with older modules.

Related: OS#6922
Change-Id: I872d882de4ce186f644b1b3ab684963050709d4f
canghaiwuhen at

#26638 (Jan 27, 2026, 3:52:17 PM)

Modified to dynamically adjust the returned QoS length to ensure compatibility with older modules.

Related: OS#6922
Change-Id: I872d882de4ce186f644b1b3ab684963050709d4f
canghaiwuhen at

#26637 (Jan 27, 2026, 1:44:30 PM)

Use newer M3UA & MTP3 deps generating MTP-STATUS,PAUSE,RESUME.ind

* titan.TestPorts.MTP3asp pointer is changed to osmocom fork containing
  extra patch adding missing fields to MTP-STATUS,PAUSE,RESUME records.
  It also adds templates for them.
* titan.ProtocolEmulations.M3UA pointer is changed to osmocom fork
  containing extra patch improving M3UA_Emulation component to build
  MTP-STATUS,PAUSE,RESUME.ind primiives when receiving DAVA/DUNA/DUPU/SCON
  from M3UA link.

The upper layers building on top of MTP3asp_PT (ie. port MTP3asp_SCCP_PT
from SCCP_MApping.ttcnp) are fine because they explicitly discard
ASP_MTP3_PAUSE,RESUME,STATUS messages in the port defintion.
Hence, supporting those in SCCP layer is left as a subsequent task.

Related: OS#6907
Change-Id: I67cc2bcf3395a81fa8acee861af01e752984ebb3
Pau Espin Pedrol at

#26636 (Jan 27, 2026, 11:46:30 AM)

deps/Makefile: Update titan.TestPorts.MTP3asp to upstream master

We used to point to an osmocom fork with a commit from 2018 fixing build without
MTP3asp_PT.cc/hh. That commit was merged upstream in 2020, so we can
point back to upstream.

Change-Id: Ieecb643db8bd3eb8739d960dfaaee183368b0c1d
Pau Espin Pedrol at

#26635 (Jan 27, 2026, 11:09:51 AM)

osmo_io: Fix misaligment of iofd->cmsg used as struct cmsghdr

Fixes following ASAN runtime error:
"""
src/stream.c:398:47: runtime error: member access within misaligned address 0x516000012b81 for type 'struct cmsghdr', which requires 8 byte alignment
0x516000012b81: note: pointer points here
51 00 00  00 30 00 00 00 00 00 00  00 84 00 00 00 01 00 00  00 00 00 00 00 00 00 00  00 00 00 00 03
              ^
"""

Current GCC documentation [1] states that __attribute__ ((__aligned__
(alignment))) is the older sytnax. The newer _Alignas mimics the
standarized alignas() in C23. Since we build with CLAGS=-std=gnu11 we
are fine using _Alignas, which was introduced in C11.

[1] https://www.gnu.org/software/c-intro-and-ref/manual/html_node/Type-Alignment.html

Related: OS#6905
Change-Id: Ia80dfc4dbffe85514b18dcf8d36b85bfafd76d64
Pau Espin Pedrol at

#26634 (Jan 27, 2026, 10:15:20 AM)

logging: Make struct log_context and struct log_target private

Change-Id: Iecbd07995ccb465a44be0debcc97458b2b240a0e
Pau Espin Pedrol at

#26633 (Jan 27, 2026, 10:14:47 AM)

Implement log file target using osmo_io

Related: OS#6918
Change-Id: Ieb6420246454ef59442b1fd7b1d14e2c00fa69a5
Pau Espin Pedrol at

#26632 (Jan 27, 2026, 10:08:15 AM)

sccp: Introduce test TC_local_unavailable_user_part_dupu

Related: OS#6907
Related: OS#6891
Change-Id: Ia0e71cc98c267692bc9230be8d15bbc861d5daad
Pau Espin Pedrol at

#26631 (Jan 27, 2026, 5:48:48 AM)

Modified to dynamically adjust the returned QoS length to ensure compatibility with older modules.

Related: OS#6922
Change-Id: I872d882de4ce186f644b1b3ab684963050709d4f
canghaiwuhen at

#26630 (Jan 27, 2026, 5:47:10 AM)

Modified to dynamically adjust the returned QoS length to ensure compatibility with older modules.

Related: OS#6922
Change-Id: I872d882de4ce186f644b1b3ab684963050709d4f
canghaiwuhen at

#26629 (Jan 27, 2026, 2:08:59 AM)

Modified to dynamically adjust the returned QoS length to ensure compatibility with older modules.

Related: OS#6922
Change-Id: I872d882de4ce186f644b1b3ab684963050709d4f
canghaiwuhen at

#26628 (Jan 26, 2026, 8:21:52 PM)

pySim-trace: pySim.apdu_source.stdin_hex

This introduces an "APDU source" for pySim-trace which enables the
decoding of APDUs that are copy+pasted from elsewhere, for example
APDU logs in text form created by proprietary tools, or to decode
personalization scripts or the like.

Change-Id: I5aacf13b7c27cea9efd42f01dacca61068c3aa33
laforge at

#26627 (Jan 26, 2026, 8:20:11 PM)

pySim.esim.saip: Don't try to generate file contents for MF/DF/ADF

only EFs have data content

Change-Id: I02a54a3b2f73a0e9118db87f8b514d1dbf53971f
laforge at

#26626 (Jan 26, 2026, 8:20:08 PM)

pySim-trace: pySim.apdu_source.stdin_hex

This introduces an "APDU source" for pySim-trace which enables the
decoding of APDUs that are copy+pasted from elsewhere, for example
APDU logs in text form created by proprietary tools, or to decode
personalization scripts or the like.

Change-Id: I5aacf13b7c27cea9efd42f01dacca61068c3aa33
laforge at

#26625 (Jan 26, 2026, 8:20:04 PM)

pySim.esim.saip: Implement optimized file content encoding

Make sure we make use of the fill pattern when encoding file contents:
Only encode the differences to the fill pattern of the file, in order
to reduce the profile download size.

Change-Id: I61e4a5e04beba5c9092979fc546292d5ef3d7aad
laforge at

#26624 (Jan 26, 2026, 7:16:46 PM)

gitignore: ignore generated .wasm files

Change-Id: I879e698f2d514cf6e2f7bb33b4d6148f79aea6f6
dtv.comp at

#26623 (Jan 26, 2026, 6:43:49 PM)

gitignore: ignore generated .wasm files

Change-Id: I023158cc39989d6fe98080fecb61410aa4e535ab
dtv.comp at

#26622 (Jan 26, 2026, 6:21:56 PM)

configure: disable libsctp by default when building with emscripten

Detect the emscripten compiler and introduce a HAVE_EMSCRIPTEN
conditional.

When building with emscripten, disable libsctp by default, as SCTP is
not supported in that environment. Native builds keep libsctp enabled
by default.

Also ignore generated .wasm artifacts.

Change-Id: I023158cc39989d6fe98080fecb61410aa4e535ab
dtv.comp at

#26621 (Jan 26, 2026, 6:21:50 PM)

stream: Fix build with --disable-libsctp

Guard SCTP-specific includes and code paths with HAVE_LIBSCTP to
allow building libosmo-netif without libsctp support.

This avoids unconditional inclusion of <osmocom/netif/sctp.h> and
ensures that SCTP-specific variables and send paths are only compiled
when SCTP support is enabled.

No functional change when HAVE_LIBSCTP is defined.

Change-Id: I07ef25f3fcc39f9bee023d9264a72c4381b82b65
dtv.comp at

#26620 (Jan 26, 2026, 5:14:38 PM)

stream: make SCTP usage conditional on HAVE_LIBSCTP

Guard SCTP-specific includes and code paths with HAVE_LIBSCTP to
allow building libosmo-netif without libsctp support.

This avoids unconditional inclusion of <osmocom/netif/sctp.h> and
ensures that SCTP-specific variables and send paths are only compiled
when SCTP support is enabled.

No functional change when HAVE_LIBSCTP is defined.

Change-Id: I07ef25f3fcc39f9bee023d9264a72c4381b82b65
dtv.comp at

#26619 (Jan 26, 2026, 5:13:49 PM)

configure: disable libsctp by default when building with emscripten

Detect the emscripten compiler and introduce a HAVE_EMSCRIPTEN
conditional.

When building with emscripten, disable libsctp by default, as SCTP is
not supported in that environment. Native builds keep libsctp enabled
by default.

Also ignore generated .wasm artifacts.

Change-Id: I023158cc39989d6fe98080fecb61410aa4e535ab
dtv.comp at

#26618 (Jan 26, 2026, 4:58:04 PM)

configure: handle emscripten builds and disable unsupported features

Detect emscripten compiler and adjust default configure options
accordingly. When building with emcc, disable ortp and DAHDI
support by default, as these components are not applicable in
Emscripten environments.

Also ignore generated .wasm artifacts in .gitignore.

No functional change for native builds.

Change-Id: I879e698f2d514cf6e2f7bb33b4d6148f79aea6f6
dtv.comp at

#26617 (Jan 26, 2026, 4:57:38 PM)

lapd-over-datagram-user: fix printf format for timeval fields

Use inttypes.h and PRI* macros when printing struct timeval
members. This avoids format string mismatches and makes the
example code portable across architectures where time_t /
suseconds_t may differ in size.

No functional change intended.

Change-Id: I7067eae1132c604aff3b37e5dff06fadb0759cb6
dtv.comp at

#26616 (Jan 26, 2026, 4:34:09 PM)

xua_snm: Fix typo in comment

Change-Id: I533809a0d319e75f2f18c706ddc4318503b9915a
Pau Espin Pedrol at

#26615 (Jan 26, 2026, 4:24:16 PM)

configure: handle emscripten builds and disable unsupported features

Detect emscripten compiler and adjust default configure options
accordingly. When building with emcc, disable ortp and DAHDI
support by default, as these components are not applicable in
Emscripten environments.

Also ignore generated .wasm artifacts in .gitignore.

No functional change for native builds.

Change-Id: I879e698f2d514cf6e2f7bb33b4d6148f79aea6f6
dtv.comp at

#26614 (Jan 26, 2026, 4:24:11 PM)

lapd-over-datagram-user: fix printf format for timeval fields

Use inttypes.h and PRI* macros when printing struct timeval
members. This avoids format string mismatches and makes the
example code portable across architectures where time_t /
suseconds_t may differ in size.

No functional change intended.

Change-Id: I7067eae1132c604aff3b37e5dff06fadb0759cb6
dtv.comp at

#26613 (Jan 26, 2026, 4:20:14 PM)

pySimLogger: user __name__ of the module when creating a new logger

At the moment we use random identifiers as names when we create a
new logger for pySimLogger. Let's switch to consistently use the
module name here. For the top level modules let's use the program
name so that it will show up in the log instead of __init__.

Change-Id: I49a9beb98845f66247edd42ed548980c97a7151a
pmaier@sysmocom.de at

#26612 (Jan 26, 2026, 4:20:11 PM)

transport/init: use PySimLogger to print messages

The module still uses print to output information. Let's replace
those print calls with the more modern PySimLogger method calls.

Change-Id: I2e2ec2b84f3b84dbd8a029ae9bb64b7a96ddbde3
pmaier@sysmocom.de at

#26611 (Jan 26, 2026, 4:14:56 PM)

sccp: Introduce test TC_local_unavailable_user_part_dupu

Related: OS#6907
Related: OS#6891
Change-Id: Ia0e71cc98c267692bc9230be8d15bbc861d5daad
Pau Espin Pedrol at

#26610 (Jan 26, 2026, 4:14:20 PM)

stream: make SCTP usage conditional on HAVE_LIBSCTP

Guard SCTP-specific includes and code paths with HAVE_LIBSCTP to
allow building libosmo-netif without libsctp support.

This avoids unconditional inclusion of <osmocom/netif/sctp.h> and
ensures that SCTP-specific variables and send paths are only compiled
when SCTP support is enabled.

No functional change when HAVE_LIBSCTP is defined.

Change-Id: I07ef25f3fcc39f9bee023d9264a72c4381b82b65
dtv.comp at

#26609 (Jan 26, 2026, 4:13:56 PM)

configure: disable libsctp by default when building with emscripten

Detect the emscripten compiler and introduce a HAVE_EMSCRIPTEN
conditional.

When building with emscripten, disable libsctp by default, as SCTP is
not supported in that environment. Native builds keep libsctp enabled
by default.

Also ignore generated .wasm artifacts.

Change-Id: I023158cc39989d6fe98080fecb61410aa4e535ab
dtv.comp at

#26608 (Jan 26, 2026, 3:29:55 PM)

server: Clarify reason of rolling pcap due to max-file-size vty config

Change the logging to print the VTY config name, so user can relate the
exct string, otherwise it can be confusing.

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

#26607 (Jan 26, 2026, 3:17:30 PM)

osmo_io: Fix misaligment of iofd->cmsg used as struct cmsghdr

Fixes following ASAN runtime error:
"""
src/stream.c:398:47: runtime error: member access within misaligned address 0x516000012b81 for type 'struct cmsghdr', which requires 8 byte alignment
0x516000012b81: note: pointer points here
51 00 00  00 30 00 00 00 00 00 00  00 84 00 00 00 01 00 00  00 00 00 00 00 00 00 00  00 00 00 00 03
              ^
"""

Related: OS#6905
Change-Id: Ia80dfc4dbffe85514b18dcf8d36b85bfafd76d64
Pau Espin Pedrol at

#26606 (Jan 26, 2026, 3:00:24 PM)

xua: Implement User Part Unavailable HMDT -> HMRT

Related: OS#6891
Change-Id: Iab2ffc3a86243d5eeedcc4fd3d558796ede9afc3
Pau Espin Pedrol at

#26605 (Jan 26, 2026, 2:08:58 PM)

Related: OS#6922 Modified to dynamically adjust the returned QoS length to ensure compatibility with older modules.

Change-Id: I872d882de4ce186f644b1b3ab684963050709d4f
canghaiwuhen at

#26604 (Jan 26, 2026, 1:48:38 PM)

Related: OS#6922 Modified to dynamically adjust the returned QoS length to ensure compatibility with older modules.

Change-Id: I872d882de4ce186f644b1b3ab684963050709d4f
canghaiwuhen at

#26603 (Jan 26, 2026, 1:27:41 PM)

rspro_server.c: Fix missing include for inet_ntoa()

This file was calling inet_ntoa() without including arpa/inet.h, which
is the header defining the function according to man and posix
documentation.

Change-Id: I49352bcc2b8e418e17453809354382bd37eb838e
Pau Espin Pedrol at

#26602 (Jan 26, 2026, 1:00:30 PM)

fake_trx: reset settings on CMD POWEROFF

When running ttcn3-bts-test, parameters such as SETTA, FAKE_RSSI,
FAKE_TOA, and others may persist across testcases if not explicitly
reset, leading to unintended cross-test interference.

Reset all transceiver settings on CMD POWEROFF to ensure proper
test isolation and predictable behavior between testcases.

Change-Id: I5c58bc684acc7a58d7aa940bb2ae7597d4a282f2
(cherry picked from commit 754d5ebb1e120e661fd3b1e025abfc5b5216ac80)
Vadim Yanitskiy at

#26601 (Jan 26, 2026, 12:56:05 PM)

fake_trx: reset settings on CMD POWEROFF

When running ttcn3-bts-test, parameters such as SETTA, FAKE_RSSI,
FAKE_TOA, and others may persist across testcases if not explicitly
reset, leading to unintended cross-test interference.

Reset all transceiver settings on CMD POWEROFF to ensure proper
test isolation and predictable behavior between testcases.

Change-Id: I5c58bc684acc7a58d7aa940bb2ae7597d4a282f2
Vadim Yanitskiy at

#26600 (Jan 26, 2026, 12:30:49 PM)

jobs/dahdi: add linux-6.12

Closes: OS#6931
Change-Id: Ia5bd796e1cdf6f0f22fe0cba1546c4487d847c30
Oliver Smith at

#26599 (Jan 26, 2026, 12:30:45 PM)

jobs/dahdi: fix git clones not getting updated

The refspec line has caused the git clones of the linux kernel to not
get updated.

Fixes: OS#6932
Change-Id: Id3b35ac10cf4fcb244c572a319433379e2e59c22
Oliver Smith at

#26598 (Jan 26, 2026, 11:41:21 AM)

Modify the QoS length to ensure compatibility with some GPRS modules, such as Air20X.

Change-Id: Iee49745809195fe7d0897dd1e9cba2427ff7008e
canghaiwuhen at

#26597 (Jan 26, 2026, 11:31:52 AM)

logging: Make struct log_context and struct log_target private

Change-Id: Iecbd07995ccb465a44be0debcc97458b2b240a0e
Pau Espin Pedrol at

#26596 (Jan 26, 2026, 11:28:58 AM)

logging: Move log target file to its own file

We already have all other log_target implementations each on its own
file. Move the file (and stderr, a specific case of file) into its own
file too, properly separating most file-specific logic from general
logging logic.

Change-Id: I8e32e31c75b66ff0649d92c2f469f8895689fbad
Pau Espin Pedrol at

#26595 (Jan 26, 2026, 11:09:17 AM)

Implement log file target using osmo_io

Related: OS#6918
Change-Id: Ieb6420246454ef59442b1fd7b1d14e2c00fa69a5
Pau Espin Pedrol at

#26594 (Jan 26, 2026, 11:07:06 AM)

osmo_io.h: Avoid including sys/socket.h

sys/socket.h may not always be available (eg. arm-none-eabi toolchain).
In the header file we only really need the forward declaration of struct
msghdr, so simply do that.

Change-Id: I5bcba8f72a2be6161d7782a3100d25a7025341d0
Pau Espin Pedrol at

#26593 (Jan 26, 2026, 11:04:07 AM)

core: guard TCP stats on availability of linux/tcp.h

Detect availability of linux/tcp.h at configure time
and build TCP statistics code conditionally based on that.

This replaces platform-specific conditionals with proper feature checks
and avoids build failures on systems lacking Linux TCP headers or types
(e.g. non-Linux or cross-build environments).

When TCP_INFO support is unavailable, the public API remains unchanged,
but all related functions return -ENOTSUP.

No functional changes on systems where linux/tcp.h are available.

Change-Id: Ibcd00f15131b0291f0b10eca51401c518b77cc39
dtv.comp at

#26592 (Jan 26, 2026, 10:29:53 AM)

socket_compat.h improvements to always have struct osmo_sockaddr available

Having a #if (!EMBEDDED) based on compiler defined variable is not a
good idea. Instead, add minimal sys/socket.h and netient/in.h to always
have the definition of struct osmo_sockaddr available.

Change-Id: I5b10e09770727c72812af15360ab3385b957509b
Pau Espin Pedrol at

#26591 (Jan 26, 2026, 10:24:13 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

#26590 (Jan 26, 2026, 10:21:38 AM)

core: guard Linux netlink headers by libmnl usage

Only include Linux-specific netlink headers when the libmnl backend
is enabled.

The code paths requiring <linux/if_link.h> and <linux/rtnetlink.h>
are entirely guarded by ENABLE_LIBMNL conditionals, so the headers should
not be included unconditionally.

This avoids pulling in Linux-only headers when the corresponding
backend is not built.

Change-Id: I0b681deb1f1e025e3ea9996f19b1de06a5feb408
dtv.comp at

#26589 (Jan 26, 2026, 10:19:52 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

#26588 (Jan 26, 2026, 10:19:47 AM)

core: guard Linux netlink headers by libmnl usage

Only include Linux-specific netlink headers when the libmnl backend
is enabled.

The code paths requiring <linux/if_link.h> and <linux/rtnetlink.h>
are entirely guarded by ENABLE_LIBMNL conditionals, so the headers should
not be included unconditionally.

This avoids pulling in Linux-only headers when the corresponding
backend is not built.

Change-Id: I0b681deb1f1e025e3ea9996f19b1de06a5feb408
dtv.comp at

#26586 (Jan 26, 2026, 10:12:52 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

#26585 (Jan 26, 2026, 10:12:46 AM)

core: guard TCP stats on availability of linux/tcp.h

Detect availability of linux/tcp.h at configure time
and build TCP statistics code conditionally based on that.

This replaces platform-specific conditionals with proper feature checks
and avoids build failures on systems lacking Linux TCP headers or types
(e.g. non-Linux or cross-build environments).

When TCP_INFO support is unavailable, the public API remains unchanged,
but all related functions return -ENOTSUP.

No functional changes on systems where linux/tcp.h are available.

Change-Id: Ibcd00f15131b0291f0b10eca51401c518b77cc39
dtv.comp at

#26584 (Jan 26, 2026, 10:12:39 AM)

core: guard Linux netlink headers by libmnl usage

Only include Linux-specific netlink headers when the libmnl backend
is enabled.

The code paths requiring <linux/if_link.h> and <linux/rtnetlink.h>
are entirely guarded by ENABLE_LIBMNL conditionals, so the headers should
not be included unconditionally.

This avoids pulling in Linux-only headers when the corresponding
backend is not built.

Change-Id: I0b681deb1f1e025e3ea9996f19b1de06a5feb408
dtv.comp at

#26583 (Jan 26, 2026, 10:09:25 AM)

core: always build tun.c and gate TUN support by headers

Always build tun.c and move platform-specific checks into the
implementation.

Guard the TUN-specific code paths based on the availability of
linux/if_tun.h detected at configure time. If TUN support is not
available, osmo_tundev_open() returns -ENOTSUP.

This keeps the public TUN API available while disabling unsupported
functionality in a capability-based way.

Change-Id: I6d1ea1644d12ef59a54cf2f73b9155def58b17a9
dtv.comp at

#26582 (Jan 26, 2026, 9:55:52 AM)

socket.h: Include netinet/in.h instead of arpa/inet.h

In socket.h we are mainly interested in netinet/int.h, since that's the
one defining INET_ADDRSTRLEN, struct sockaddr_in, struct in_addr, ec.

Header arpa/inet.h usually defines several functions which use those,
like htonl(), inet_ntop(), etc.

See POSIX:
https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/arpa_inet.h.html#tag_13_03
https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/netinet_in.h.html

Change-Id: I03919c4adc962bbcfabc9030c6f12c0e10ff060c
Pau Espin Pedrol at

#26581 (Jan 26, 2026, 9:55:45 AM)

Implement log file target using osmo_io

TODO: re-add talloc_pool.

Related: OS#6918
Change-Id: Ieb6420246454ef59442b1fd7b1d14e2c00fa69a5
Pau Espin Pedrol at

#26580 (Jan 26, 2026, 9:55:36 AM)

configure.ac: Add arpa/inet.h to AC_CHECK_HEADERS

We use arpa/inet.h in several places in the code, so it's good to look
up for presence even if it's only to debug toolchain compatibility.

Change-Id: Ib2d1fb3efb1dcb429b511698691249c257e00720
Pau Espin Pedrol at

#26579 (Jan 26, 2026, 9:55:21 AM)

remove references to define EMBEDDED in public headers

It's not a good idea to base opt-in/out of code in public headers based
on some specific non-standard define being set at compile time when
calling the compiler. Get rid of those references; Now that
osmocom/core/socket.h can be included thanks to improved
osmocom/core/socket_compat.h, it shouldn't be a problem.

Change-Id: I7a657d67077dfbe861959c6123eb9163bc791694
Pau Espin Pedrol at

#26577 (Jan 26, 2026, 9:50:26 AM)

logging: Make struct log_context and struct log_target private

Change-Id: Iecbd07995ccb465a44be0debcc97458b2b240a0e
Pau Espin Pedrol at

#26576 (Jan 26, 2026, 9:44:12 AM)

osmo_io.h: Avoid including sys/socket.h

sys/socket.h may not always be available (eg. arm-none-eabi toolchain).
In the header file we only really need the forward declaration of struct
msghdr, so simply do that.

Change-Id: I5bcba8f72a2be6161d7782a3100d25a7025341d0
Pau Espin Pedrol at

#26575 (Jan 26, 2026, 9:26:20 AM)

logging: Move log target file to its own file

We already have all other log_target implementations each on its own
file. Move the file (and stderr, a specific case of file) into its own
file too, properly separating most file-specific logic from general
logging logic.

Change-Id: I8e32e31c75b66ff0649d92c2f469f8895689fbad
Pau Espin Pedrol at

#26574 (Jan 26, 2026, 8:57:16 AM)

osmo_io: Add assert to validate inconditional

The do-while loop is entered:
* First time: "tail_msg != NULL" (since it was set to "msg").
* Subsequent times: coming from "while" condition:
** tail_msg != NULL
** res == IOFD_SEG_ACT_HANDLE_MORE, which means iofd->pending != NULL.

Hence, always either "iofd->pending" or "tail_msg" is valid when entering
the loop, and hence "msg" will also be valid.

Related: Coverity CID#557196
Change-Id: If29363edfba576370e306fb5b160d9f038018130
Pau Espin Pedrol at

#26573 (Jan 25, 2026, 7:02:27 PM)

core: always build tun.c and gate TUN support by headers

Always build tun.c and move platform-specific checks into the
implementation.

Guard the TUN-specific code paths based on the availability of
linux/if_tun.h detected at configure time. If TUN support is not
available, osmo_tundev_open() returns -ENOTSUP.

This keeps the public TUN API available while disabling unsupported
functionality in a capability-based way.

Change-Id: I6d1ea1644d12ef59a54cf2f73b9155def58b17a9
dtv.comp at

#26572 (Jan 25, 2026, 7:02:18 PM)

core: fix printf format casts for struct timeval fields

Explicitly cast struct timeval fields to long when passing them to
printf-style functions.

This avoids compiler warnings/errors on platforms where tv_sec or
tv_usec are not exactly of type long, while keeping the existing log
and control output unchanged.

Change-Id: Icac9e392c728948a7976970658e37f5e0da41709
dtv.comp at

#26571 (Jan 25, 2026, 7:01:53 PM)

core: guard TCP stats on availability of linux/tcp.h

Detect availability of linux/tcp.h at configure time
and build TCP statistics code conditionally based on that.

This replaces platform-specific conditionals with proper feature checks
and avoids build failures on systems lacking Linux TCP headers or types
(e.g. non-Linux or cross-build environments).

When TCP_INFO support is unavailable, the public API remains unchanged,
but all related functions return -ENOTSUP.

No functional changes on systems where linux/tcp.h are available.

Change-Id: Ibcd00f15131b0291f0b10eca51401c518b77cc39
dtv.comp at

#26570 (Jan 25, 2026, 7:01:41 PM)

vty: guard definition of _XOPEN_SOURCE

Define _XOPEN_SOURCE only if it is not already provided by the build
environment.

This avoids redefinition warnings/errors while ensuring required POSIX
interfaces are available.

Change-Id: I4f53aff1afef02abce7cb70d1b29080ba900ff41
dtv.comp at

#26569 (Jan 25, 2026, 7:01:30 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

#26568 (Jan 25, 2026, 7:00:49 PM)

core: remove SCTP include from osmo_io_internal.h

No functional changes intended.

Change-Id: Icd626d908192a954d55d76a46d7cc863ed332631
dtv.comp at

#26567 (Jan 25, 2026, 6:55:04 PM)

build: keep netns API public and gate features with HAVE_*

The netns API was previously guarded by platform-specific preprocessor
conditions (e.g. !EMBEDDED and defined(__linux__)), which caused the
netns headers and implementation to be entirely excluded from non-Linux
builds such as Emscripten. This in turn led to build failures in code
depending on the netns API, as the symbols and declarations were not
available at all.

Always build netns.c and keep the public declarations available
for non-embedded builds. Move platform/feature conditionals into the
implementation: guard the netns code paths with HAVE_SETNS/HAVE_UNSHARE/
HAVE_MOUNT and HAVE_CLONE_NEWNET, and return -ENOTSUP when the required
functionality is not available.

Add configure-time checks for the required headers/functions and for the
CLONE_NEWNET declaration, defining the
corresponding HAVE_* macros.

No functional changes intended for platforms where netns is available.

Change-Id: I2322eb2936bea35596f1fd6b6a713ea5f997b1ea
dtv.comp at

#26566 (Jan 25, 2026, 7:12:21 AM)

bts: move as_rsl_meas_res() params to ConnHdlrPars

This is where all other ConnHdlr parameters live.

Change-Id: Iceb58bb636817afcd0fdf1eb3344d03153860a56
Related: OS#6933
Vadim Yanitskiy at

#26565 (Jan 25, 2026, 7:11:32 AM)

bts: f_est_dchan(): populate UL SACCH cache

This ensures that UL SACCH blocks always contain the expected content
and a proper L1 SACCH header, rather than the dummy measurement report
hard-coded in trxcon/firmware.  As a result, the BTS receives
consistent and realistic UL SACCH from the very beginning.

Change-Id: I4781fe7539e64e77d594e84f905646c127f46b64
Related: OS#6933
Vadim Yanitskiy at

#26564 (Jan 25, 2026, 7:10:53 AM)

bts: rename s/as_meas_res/as_rsl_meas_res/

Let's make it clear that this altstep is tracking measurements on
the A-bis/RSL link (MEASurement RESult PDUs).

Change-Id: Ie9dd0d06ac6fcaba5724c6a3eb7459d0971139f9
Related: OS#6933
Vadim Yanitskiy at

#26563 (Jan 25, 2026, 7:10:43 AM)

bts: use existing API in as_l1_sacch_loop()

Change-Id: I5ab2988152b948e457c3cfa4930df484c170d053
Vadim Yanitskiy at

#26562 (Jan 25, 2026, 7:10:36 AM)

library: make ts_MEAS_REP accept MeasurementResults

This reduces code duplication and makes ts_MEAS_REP easier to use.

Change-Id: I12113360f52b0ce09aa9bc11472fdd04bf14f368
Vadim Yanitskiy at