Skip to content

Loading builds...

Changes

#28699 (Jun 10, 2026, 1:51:32 PM)

CCID: Check if reader times out while expecting status words

A case 1 APDU is sent toward the reader. The reader expects two status
words. If none of these are sent by the SIM the reader must timeout and
send an error message back to the host.

Change-Id: I054b56a9e2f10e5b984ad0398efb4be5696ce16c
Andreas Eversberg at

#28698 (Jun 10, 2026, 1:51:27 PM)

CCID: Check response of reader with empty SIM carrier

The reader has a SIM carrier inserted, but there is no response from the
SIM while expecting the ATR. The reader will get a timeout and is
expected to respond with a suitable error code.

The test uses the slot with the SIMtrace inserted. The SIMtrace will not
respond with an ATR. This way there is no (extra) empty slot required
for this test.

Change-Id: Ifebdcce8f9dd9a51de5a5cb6cf223041d5c38622
Andreas Eversberg at

#28697 (Jun 10, 2026, 1:51:23 PM)

CCID: Check if reader handles special P3 value 0x00 correctly

If data is requested from SIM with P3 set 0x00, it means that 256
bytes are requested. The reader will receive a procedure byte, which
must cause it to receive all 256 data bytes + two status words.

Change-Id: Icc3fd1937b9829fcf825c58d7b676aa2be2c48e7
Andreas Eversberg at

#28696 (Jun 10, 2026, 1:51:19 PM)

SIMTRACE: Increase USB receive buffer size

The maximum SIM request data can be 255 bytes. Additionally, the
SIMtrace PDU header is 14 bytes. So increase the buffer to 269 bytes.

Change-Id: I05261b4a754b4892955d0b4e426bd32be261efa7
Andreas Eversberg at

#28695 (Jun 10, 2026, 1:51:14 PM)

CCID: Check if reader restarts WWT upon NULL procedure byte

The reader will receive a NULL procedure byte every 0.2 for a long time.
The reader may only respond with a status that time extension was
requested. At the end the SIM proceeds with a valid response. This
response must be returned by the reader.

Change-Id: I4eb09e86f88df19d96e9ec55872654352ca2ebd5
Andreas Eversberg at

#28694 (Jun 10, 2026, 1:51:10 PM)

CCID: Check if reader handles Abort correctly

This test fails with osmo-ccid-firmware, because it is not yet
implemented.

Change-Id: Iebe97e73497b8468ebf08faf2c4db700fc76997f
Andreas Eversberg at

#28693 (Jun 10, 2026, 1:51:06 PM)

CCID: Integrate SIMTRACE emulation into test cases

This integration allows to add tests that use SIMtrace hardware instead
of a physical SIM. These tests can be used to test handling of invalid
behaviors, such as invalid responses or timeouts.

The number of slots (mp_use_slot_count) are reduced to 7, so that the
8th slot can be used with a SIMtrace for subsequent tests.

Change-Id: Ia27dd5198edb188bc73196ac3fbd6d56ba75812e
Andreas Eversberg at

#28692 (Jun 10, 2026, 1:51:01 PM)

CCID: Check if reader accepts highest P3 value 0xff

This test should ensure that there is no buffer overflow when receiving
large responses from SIM.

Change-Id: I298795d791f2964758bd4792e10131f92cf561bc
Andreas Eversberg at

#28691 (Jun 10, 2026, 1:50:57 PM)

CCID: Update titan.TestPorts.USB to current head

Update the USB test port dependency to include recent changes and
bugfixes that are required for further CCID tests.

Change-Id: I9dd769d2098822721f673b1293542fffa46542cc
Andreas Eversberg at

#28690 (Jun 10, 2026, 1:50:54 PM)

CCID: Add test to verify a working Simtrace setup

This test checks if a valid request is forwarded to SIMtrace and a
valid response is returned back to the reader.

Change-Id: I19264bc257024e9028996e417ff23bbbaebf5f92
Andreas Eversberg at

#28689 (Jun 10, 2026, 1:50:50 PM)

CCID: Send procedure byte, when not expected

A case 1 APDU does not request any data from SIM to return. The SIM will
only return a status byte with no procedure byte in advance.

The test sends a procedure byte in advance of the two status bytes
towards the reader. The reader expects SW1 instead of the status byte,
so that it returns it as SW1.

Change-Id: Icffd48d99f0eb48e0898efb027854eba8c22f4a4
Andreas Eversberg at

#28688 (Jun 10, 2026, 1:50:46 PM)

CCID: Check if reader times out while expecting procedure byte

A case 3 APDU is sent toward the reader. The reader expects a procedure
byte or a status word. If none of these are sent by the SIM the reader
must timeout and send an error message back to the host.

Change-Id: Iacd6aacaf8220e69b9b7038e354d54c788d1eb05
Andreas Eversberg at

#28687 (Jun 10, 2026, 1:50:43 PM)

SIMTRACE: Add missing pres_pol to CardEmu_BD_Config message

Change-Id: I443e8151b0aa9bff150222ab6b507ed1f7946768
Andreas Eversberg at

#28686 (Jun 10, 2026, 1:50:39 PM)

CCID: Add testenv.cfg to run tests using testenv

Change-Id: I97c9da414facf438aa28d5200c4152730ff763a2
Andreas Eversberg at

#28685 (Jun 10, 2026, 1:50:27 PM)

CCID: Truncated APDU test

A SELECT APDU must have a header + two bytes of data (what to select).
The test truncates this APDU in all variants, ranging from 6 bytes down
to 0 bytes. The reader may respond with an error caused by invald
request or with and error caused by timeout of the SIM.

Change-Id: I3df2ad9871bccdd03f618a6a457671adb1624590
Andreas Eversberg at

#28684 (Jun 10, 2026, 1:49:26 PM)

CCID: Check if reader handles truncated SIM response

The reader knows how many byte of data is expected in the SIM response.
The emulated SIM will truncate that response, so that some data and the
final status words are not sent by the SIM. The tests expects the
reader to time out and return an appropriate error core.

Change-Id: I6db6d7889a1355ee9aa2005e676fed5d20a3f2dc
Andreas Eversberg at

#28683 (Jun 10, 2026, 1:47:55 PM)

CCID: Check if reader sends request TPDU with maximum size

The maximum size of a request TPDU can have 5 bytes header and 255 bytes
data. It is expected that the reader transmits all bytes to SIM without
failure.

Change-Id: I7c1cb52b578c19d6c0ec1493e45f6ed9c43735b4
Andreas Eversberg at

#28682 (Jun 10, 2026, 1:47:50 PM)

CCID: Send a wrong procedure byte towards the reader

A case 3 request is send and a response with data is expected, but the
first byte replied by the sim is not a procedure byte, nor a valid
status byte.

This text expects the reader to return an error that states an incorrect
received procedure byte.

Change-Id: Iaa0bd8845b3408fba309874fe41c855d8e7efccc
Andreas Eversberg at

#28681 (Jun 10, 2026, 1:29:25 PM)

CCID: Check if reader times out while expecting procedure byte

A case 3 APDU is sent toward the reader. The reader expects a procedure
byte or a status word. If none of these are sent by the SIM the reader
must timeout and send an error message back to the host.

Change-Id: Iacd6aacaf8220e69b9b7038e354d54c788d1eb05
Andreas Eversberg at

#28680 (Jun 10, 2026, 1:29:21 PM)

CCID: Send procedure byte, when not expected

A case 1 APDU does not request any data from SIM to return. The SIM will
only return a status byte with no procedure byte in advance.

The test sends a procedure byte in advance of the two status bytes
towards the reader. The reader expects SW1 instead of the status byte,
so that it returns it as SW1.

Change-Id: Icffd48d99f0eb48e0898efb027854eba8c22f4a4
Andreas Eversberg at

#28679 (Jun 10, 2026, 1:29:17 PM)

CCID: Check response of reader with empty SIM carrier

The reader has a SIM carrier inserted, but there is no response from the
SIM while expecting the ATR. The reader will get a timeout and is
expected to respond with a suitable error code.

The test uses the slot with the SIMtrace inserted. The SIMtrace will not
respond with an ATR. This way there is no (extra) empty slot required
for this test.

Change-Id: Ifebdcce8f9dd9a51de5a5cb6cf223041d5c38622
Andreas Eversberg at

#28678 (Jun 10, 2026, 1:29:13 PM)

CCID: Check if reader handles special P3 value 0x00 correctly

If data is requested from SIM with P3 set 0x00, it means that 256
bytes are requested. The reader will receive a procedure byte, which
must cause it to receive all 256 data bytes + two status words.

Change-Id: Icc3fd1937b9829fcf825c58d7b676aa2be2c48e7
Andreas Eversberg at

#28677 (Jun 10, 2026, 1:29:09 PM)

CCID: Check if reader accepts highest P3 value 0xff

This test should ensure that there is no buffer overflow when receiving
large responses from SIM.

Change-Id: I298795d791f2964758bd4792e10131f92cf561bc
Andreas Eversberg at

#28676 (Jun 10, 2026, 1:29:05 PM)

CCID: Integrate SIMTRACE emulation into test cases

This integration allows to add tests that use SIMtrace hardware instead
of a physical SIM. These tests can be used to test handling of invalid
behaviors, such as invalid responses or timeouts.

The number of slots (mp_use_slot_count) are reduced to 7, so that the
8th slot can be used with a SIMtrace for subsequent tests.

Change-Id: Ia27dd5198edb188bc73196ac3fbd6d56ba75812e
Andreas Eversberg at

#28675 (Jun 10, 2026, 1:29:01 PM)

CCID: Add testenv.cfg to run tests using testenv

Change-Id: I97c9da414facf438aa28d5200c4152730ff763a2
Andreas Eversberg at

#28674 (Jun 10, 2026, 1:28:57 PM)

CCID: Check if reader sends request TPDU with maximum size

The maximum size of a request TPDU can have 5 bytes header and 255 bytes
data. It is expected that the reader transmits all bytes to SIM without
failure.

Change-Id: I7c1cb52b578c19d6c0ec1493e45f6ed9c43735b4
Andreas Eversberg at

#28673 (Jun 10, 2026, 1:28:53 PM)

CCID: Check if reader handles Abort correctly

This test fails with osmo-ccid-firmware, because it is not yet
implemented.

Change-Id: Iebe97e73497b8468ebf08faf2c4db700fc76997f
Andreas Eversberg at

#28672 (Jun 10, 2026, 1:28:49 PM)

CCID: Send a wrong procedure byte towards the reader

A case 3 request is send and a response with data is expected, but the
first byte replied by the sim is not a procedure byte, nor a valid
status byte.

This text expects the reader to return an error that states an incorrect
received procedure byte.

Change-Id: Iaa0bd8845b3408fba309874fe41c855d8e7efccc
Andreas Eversberg at

#28671 (Jun 10, 2026, 1:28:45 PM)

CCID: Add test to verify a working Simtrace setup

This test checks if a valid request is forwarded to SIMtrace and a
valid response is returned back to the reader.

Change-Id: I19264bc257024e9028996e417ff23bbbaebf5f92
Andreas Eversberg at

#28670 (Jun 10, 2026, 1:28:40 PM)

CCID: Check if reader restarts WWT upon NULL procedure byte

The reader will receive a NULL procedure byte every 0.2 for a long time.
The reader may only respond with a status that time extension was
requested. At the end the SIM proceeds with a valid response. This
response must be returned by the reader.

Change-Id: I4eb09e86f88df19d96e9ec55872654352ca2ebd5
Andreas Eversberg at

#28669 (Jun 10, 2026, 1:28:32 PM)

CCID: Truncated APDU test

A SELECT APDU must have a header + two bytes of data (what to select).
The test truncates this APDU in all variants, ranging from 6 bytes down
to 0 bytes. The reader may respond with an error caused by invald
request or with and error caused by timeout of the SIM.

Change-Id: I3df2ad9871bccdd03f618a6a457671adb1624590
Andreas Eversberg at

#28668 (Jun 10, 2026, 1:28:27 PM)

CCID: Check if reader times out while expecting status words

A case 1 APDU is sent toward the reader. The reader expects two status
words. If none of these are sent by the SIM the reader must timeout and
send an error message back to the host.

Change-Id: I054b56a9e2f10e5b984ad0398efb4be5696ce16c
Andreas Eversberg at

#28667 (Jun 10, 2026, 1:28:16 PM)

SIMTRACE: Add missing pres_pol to CardEmu_BD_Config message

Change-Id: I443e8151b0aa9bff150222ab6b507ed1f7946768
Andreas Eversberg at

#28666 (Jun 10, 2026, 1:26:52 PM)

CCID: Check if reader handles truncated SIM response

The reader knows how many byte of data is expected in the SIM response.
The emulated SIM will truncate that response, so that some data and the
final status words are not sent by the SIM. The tests expects the
reader to time out and return an appropriate error core.

Change-Id: I6db6d7889a1355ee9aa2005e676fed5d20a3f2dc
Andreas Eversberg at

#28665 (Jun 10, 2026, 1:26:44 PM)

SIMTRACE: Increase USB receive buffer size

The maximum SIM request data can be 255 bytes. Additionally, the
SIMtrace PDU header is 14 bytes. So increase the buffer to 269 bytes.

Change-Id: I05261b4a754b4892955d0b4e426bd32be261efa7
Andreas Eversberg at

#28664 (Jun 10, 2026, 9:35:29 AM)

NGAP: UESecurityCapabilities is optional in PathSwitchRequestAcknowledge

Current master branch of Open5GS includes UESecurityCapabilities IE
in PathSwitchRequestAcknowledge, older versions do not. In order to
match message of all versions, replace the IE by an an asterisk.

Change-Id: I4849709d2601505d9aa3ea6c85b718ec65540dff
Andreas Eversberg at

#28663 (Jun 9, 2026, 4:18:50 PM)

Transceiver52M: fix viterbi-eq soft bits on platforms where char is unsigned

The viterbi-eq demodulator stores soft bits into chars.
"char" is signed on x86/amd64 but unsigned on arm64.
On arm64 the stored byte 0x81 (== -127) is read back as +129, so after the
sign flip and vectorSlicer() clamp every soft bit collapses to 0.0.

The same issue also appears to be present in the MS code path, so it was
(blindly) fixed there as well. The MS fixes are untested!

Change-Id: I1cda66228f3d48e1b941b25614d599c16ad79aa0
Manawyrm at

#28662 (Jun 9, 2026, 4:10:30 PM)

stp: for TCAP loadshare: use NI == national

Use a non-zero NI. The TCAP tests don't check it
on the receive path, but the osmo-stp is checking
it if it matches the configuration.

Related: SYS#8061
Change-Id: I51ef302ad72ff3c434fddb39006ce50106a5918f
lynxis at

#28661 (Jun 9, 2026, 4:10:25 PM)

stp: tcap-loadshare: add TC_tcap_loadshare_m3ua_to_ipa_udts

If a TCAP message arrives which is:
* not a TCAP Begin or Abort (e.g. a TCAP Continue)
* not in the TCAP session cache/tracking
* not have a dTID for a registered TCAP Add Range

The tcap load-share will reject this message with a UDTS

Related: SYS#8061
Change-Id: I181b25aedfd70d156c08197d361560b6d055e65a
lynxis at

#28660 (Jun 9, 2026, 3:33:34 PM)

m3ua: fix missing decoding of message priority & network indicator flag

The missing parenthesis always or'ed with a 0x0 into the sio field because
of operator precendence. Left shift is stronger than a binary and.

Change-Id: I7a07363646f66c5c672a2c0d261ca33356b43031
lynxis at

#28659 (Jun 9, 2026, 12:10:44 PM)

Transceiver52M: fix viterbi-eq soft bits on platforms where char is unsigned

The viterbi-eq demodulator stores soft bits into chars.
"char" is signed on x86/amd64 but unsigned on arm64.
On arm64 the stored byte 0x81 (== -127) is read back as +129, so after the
sign flip and vectorSlicer() clamp every soft bit collapses to 0.0.

The same issue also appears to be present in the MS code path, so it was
(blindly) fixed there as well. The MS fixes are untested!

Change-Id: I1cda66228f3d48e1b941b25614d599c16ad79aa0
Manawyrm at

#28658 (Jun 9, 2026, 11:51:19 AM)

cuart: Fix waiting time to be per-byte instead of total timeout

The previous code multiplied WT by the number of expected bytes,
creating a total timeout proportional to the transfer size. This works
fine for (currently unsupported) high baud rates, but it makes it look
like the reader "freezes" at default rates due to the very long delay.

Just reset it upon rx and do not multiply it so it behaves as expected.

Closes:OS#7012
Change-Id: Ic00040b88e1b204db3f4f3edad09878aa28d35a1
Andreas Eversberg at

#28657 (Jun 9, 2026, 11:51:16 AM)

7816fsm: Handle unexpected procedure bytes gracefully

Dispatch TPDU_FAILED_IND and don't assert for wrong procedure bytes.

Closes:SYS#8050
Change-Id: Ic53814540775f902fce644a5565a7bd2f177a7fe
Andreas Eversberg at

#28656 (Jun 9, 2026, 11:51:14 AM)

ccid: ICC_MUTE instead of CMD_NOT_SUPPORTED on XfrBlock to unpowered slot

The command is supported, just currently impossible.

Closes:OS#7015
Change-Id: I7f64475b023bd2b6fd1c4263850e56dd84d20b3e
Andreas Eversberg at

#28655 (Jun 9, 2026, 11:51:11 AM)

7816fsm: state_chg before card_uart_tx in tpdu_s_procedure_action

State change must precede the TX to ensure we don't lose
TX_COMPLETE notifications that arrive at a bad time.

Change-Id: Id66f836452674209e25dc3ee4c37d616de30001b
Andreas Eversberg at

#28654 (Jun 9, 2026, 11:51:09 AM)

7816fsm: reset stale cuart state on FSM RESET entry

Reset paths reached without power-cycling (WTIME_EXP, HW_ERR,
CARD_REMOVAL during a warm reset) leave the cuart with stale tx_busy,
rx_threshold and wtime_etu from the prior transaction. The next ATR
then hits card_uart_tx tx_busy assertion, or the ATR receive stalls
because the 33-byte ATR can never reach a multi-byte rx_threshold
left from a TPDU.

The new card_uart_tx_abort() clears tx_busy + rx_after_tx_compl + WT,
without driving a synthetic TX_COMPLETE through the FSM.

iso7816_3_reset_onenter is the right place to do this alongside
rx_threshold=1 and wtime_etu=default, this mirrors what
card_uart_ctrl(POWER_*=0) already does, but for the warm-reset paths
that don't touch power.

Change-Id: Iac8bd7f4f0eecccc9acce149277a4f5016fec7c1
Andreas Eversberg at

#28653 (Jun 9, 2026, 11:51:06 AM)

7816fsm: fail PPS on invalid first byte in PPS_S_WAIT_PPSX

Change-Id: I5b74b8443a98224c0c95a664a886066495d8b64a
Andreas Eversberg at

#28652 (Jun 9, 2026, 11:51:01 AM)

ccid: reject invalid bClockCommand

Change-Id: I34dedcaaaf3cd67e22b207016f08e745736dd625
Andreas Eversberg at

#28651 (Jun 9, 2026, 11:50:55 AM)

libosmo_emb: type-safe tearfree_u64_t wrapper for LDRD/STRD access

Although types are frowned upon because memorizing all differerent flavors
of void* is the usual way to get acquainted with any mature C code base
some heretics decided to introduce generics in C11, which can be used to
make aligned access (which guarantees tear-free/restartable 64 bit access
on cortex m4) less exciting.

Change-Id: I458bfaf53e27c51882c7a8c1326e51d12943b0bb
Andreas Eversberg at

#28650 (Jun 9, 2026, 11:50:51 AM)

usb: properly handle data toggle bit

Same config SetConfig is currently not properly handled and stale toggle
bits lead to weird transfers until USB resyncs because the asf4 code itself
does not properly handle the toggle bit.

- USB 2.0 §9.4.5 states that ClearFeature(ENDPOINT_HALT) unconditionally
resets the data toggle to DATA0
- USB 2.0 §9.1.1.5 demands toggle reset even when the same config/interface
is selected

The old code was only doing a proper reset upon receiving a bus reset,
but the actual state reset path outlined in the spec is the set config command.
The easy fix here is to split the existing reset code which already does
everything we need into two parts for the actual usb reset and SetConfig.

The current halt clear code only resets DTGL if the endpoint is
actually halted and a fix is a bit more complicated.
_usb_d_dev_ep_stall_clr() is also called from the SETUP-packet cleanup
path in hal_usb_device.c
    _usb_d_dev_ep_stall(ep, USB_EP_STALL_CLR);
    _usb_d_dev_ep_stall(ep | USB_EP_DIR, USB_EP_STALL_CLR);

This runs on every SETUP packet as defensive cleanup of any
leftover stall from a previous failed transfer. That might be why the
asf4 usb code is wrong, because a toggle reset here breaks SETUP.

So the unconditional DTGL reset for halt clearing must therefore happen
in _usb_d_ep_halt_clr itself, which is only reached via the ClearFeature
host request (usbdc_clear_ftr_req -> usb_d_ep_halt(HALT_CLR)),
using a small HPL helper function.

Closes:OS#7016
Change-Id: I5dbca9bd2212407108b44815ecf566fc9c22336d
Andreas Eversberg at

#28649 (Jun 9, 2026, 9:19:37 AM)

tcap_as_loadshare: Fix compare ignoring non-TCAP messages and remove assert

The previous check in asp_loadshare_tcap_sccp()  was was never true because it
checked msg class twice instead of class and type.

Also remove the OSMO_ASSERT in send_back_udts() limiting the function to
CL/DT messages.

Related: SYS#5432
Change-Id: I0831b289e4e4e94fd1b719e6c7164c3dd87c9f88
dwillmann at

#28648 (Jun 9, 2026, 9:13:01 AM)

coverity/jenkins: check if upload was successful

When the server returns an error, the curl command does not fail -
probably because the server sends a wrong http status code:

  curl \
   --form token="$token" \
   --form email=holger@freyther.de --form file=@Osmocom.tgz \
   --form version=Version --form description=AutoUpload \
   https://scan.coverity.com/builds?project=Osmocom
  + set +x
    % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                   Dload  Upload   Total   Spent    Left  Speed
  …
  <html>
  <head><title>413 Request Entity Too Large</title></head>
  <body>
  <center><h1>413 Request Entity Too Large</h1></center>
  <hr><center>nginx/1.19.10</center>
  </body>
  </html>
  Finished: SUCCESS

Fail if the output doesn't contain the "Build successfully submitted"
string, so the job fails if there was an error.

(The request entity too large error is probably an error on their end,
scan.coverity.com still says they are performing upgrades on their
servers.)

Change-Id: Ie63a33dfa7648b38f1f01cb8c87db76949f69e10
Oliver Smith at

#28647 (Jun 9, 2026, 8:16:56 AM)

tcap_as_loadshare: Fix newline on log message

Change-Id: Iad85ec2d4e6a64d84a865c23eb00fddcb6d767c9
dwillmann at

#28646 (Jun 8, 2026, 11:55:02 AM)

fix(ts_51_011): fix lifecycle decoding

- implement proper LCS decoding per TS 102 221 / TS 31.101
- previous implementation misclassified multiple states

Related: OS#7018
Change-Id: I8a3bd820b9fbc13c025f8302d1d2eac21686c541
pmaier@sysmocom.de at

#28645 (Jun 8, 2026, 11:54:59 AM)

fix(ts_51_011): apply correct access conditions length

When the access conditions are extracted from resp_bin, the wrong length
is used and only 2 bytes instead of 3 are extracted.

3GPP TS 51.011, section 9.2.1, table below "Response parameters/data
in case of an EF", clearly states that the length should be 3 bytes
(position 9-11)

Related: OS#7018
Change-Id: I410fb58c395beafba8de6d5ab4e71452f424cdf2
pmaier@sysmocom.de at

#28644 (Jun 8, 2026, 7:24:42 AM)

7816fsm: fail PPS on invalid first byte in PPS_S_WAIT_PPSX

Change-Id: I5b74b8443a98224c0c95a664a886066495d8b64a
ewild at

#28643 (Jun 5, 2026, 1:36:37 PM)

tcap loadsharing: tcap_as_rx_sccp_asp: Fix memory leak

Change-Id: Id0b21bffcad43d9999f7579d92e5ef2f4a0d9f1a
lynxis at

#28642 (Jun 5, 2026, 8:57:34 AM)

testenv: move titan_min to testsrcdir.cfg

Adjust the code so it gets titan_min= from testsrcdir.cfg, instead of
having it in testenv.cfg and enforcing that the value is the same across
all files in the same source directory.

While at it, set the default to 11.1.0 (the value that is currently in
all testenv.cfg files), so we don't need to repeat it in all source
directories.

Change-Id: Ife12e3b3294ce16ebedee1b7998d3b89856f0328
Oliver Smith at

#28641 (Jun 5, 2026, 8:57:27 AM)

testenv: introduce testsrcdir.cfg

Source directories can have more than one testenv.cfg file. Some options
have been added to testenv.cfg that are not really specific to a single
testsuite or how it gets executed, but to the whole source directory.

This is not ideal, because we need to have additional code that ensures
these options have the same value across all testenv.cfg files in the
same source directory, and we need functions that just pick the value
from the first of these configs. When we change such a value, we also
need to potentially make the change in multiple files.

Resolve this by introducing a new config file testsrcdir.cfg, that can
be optionally present in the source directory, and has options that
count for all testsuites in the same source directory.

Move max_jobs_per_gb_ram= as first option to the new file. The following
patches will move all other source directory specific options to
testsrcdir.cfg.

I have also considered naming the new file testdir.cfg, but the name
"testdir" is already used in the source code for the place where we
execute the individual testsuites after copying configs into that
directory.

Change-Id: I8eceea7b874ce1352e2cc9780b77d2a8e694cd28
Oliver Smith at

#28640 (Jun 5, 2026, 8:57:23 AM)

testenv: fix podman_extra with multiple cfgs

Do not reuse the container that gets started to build the testsuite and
test components, to also do the the first testsuite run. Restart it
after selecting the current testenv*.cfg, and use the podman_extra value
from the right config instead.

As side-effect, this also makes the container restart logic much
simpler.

Change-Id: I12e187726673e1ca1b1ecfff6b34b1803127be86
Oliver Smith at

#28639 (Jun 5, 2026, 7:45:37 AM)

Add VTY test for "listen" node of osmo-stp VTY config

Change-Id: Ia1ceb5f0374f47ff269b557be30fc4d59550d1a6
Andreas Eversberg at

#28638 (Jun 5, 2026, 7:45:34 AM)

Add test case to verify proper DSCP settings

Related: SYS#8071
Change-Id: I6ac965998433b4d8213cce30fc3fcf8fe485a092
Andreas Eversberg at

#28637 (Jun 5, 2026, 7:44:48 AM)

Add DSCP configuration support for each individual ASP

Introduce VTY command to configure the Differentiated Services Code
Point (DSCP) values for each Application Server Process.

If the ASP connection has the role "server", it will inherit the DSCP
settings of the listener, unless it is configured at the ASP connection.

Related: SYS#8071
Change-Id: Ia125a392eec5605553809774162675b5249b8494
Andreas Eversberg at

#28636 (Jun 4, 2026, 12:18:07 PM)

Add VTY test for "listen" node of osmo-stp VTY config

Change-Id: Ia1ceb5f0374f47ff269b557be30fc4d59550d1a6
Andreas Eversberg at

#28635 (Jun 4, 2026, 12:16:47 PM)

Add DSCP configuration support for each individual ASP

Introduce VTY command to configure the Differentiated Services Code
Point (DSCP) values for each Application Server Process.

If the ASP connection has the role "server", it will inherit the DSCP
settings of the listener, unless it is configured at the ASP connection.

Related: SYS#8071
Change-Id: Ia125a392eec5605553809774162675b5249b8494
Andreas Eversberg at

#28634 (Jun 4, 2026, 12:16:44 PM)

Add DSCP configuration support for server transport role

Introduce VTY command to configure the Differentiated Services Code
Point (DSCP) values for transport "role" server.

The configured DSCP value is applied to the listener socket. Incoming
socket connections will then automatically inherit these DSCP settings
from the listener socket.

It is not (yet) possible to configure DSCP values for individual active
server connections. The setting applies globally via the listener.
A later patch will allow DSCP configuration of each individual ASP.

Related: SYS#8071
Depends: libosmo-netif.git Change-Id Ic70422ec73c753b61843444582f8665ca42e7a6d
Change-Id: I35eab3672157c318616f51ee3042243aed263d4e
Andreas Eversberg at

#28633 (Jun 4, 2026, 12:16:41 PM)

Add test case to verify proper DSCP settings

Related: SYS#8071
Change-Id: I6ac965998433b4d8213cce30fc3fcf8fe485a092
Andreas Eversberg at

#28632 (Jun 3, 2026, 10:19:11 AM)

CCID: Integrate SIMTRACE emulation into test cases

This integration allows to add tests that use SIMtrace hardware instead
of a physical SIM. These tests can be used to test handling of invalid
behaviors, such as invalid responses or timeouts.

The number of slots (mp_use_slot_count) are reduced to 7, so that the
8th slot can be used with a SIMtrace for subsequent tests.

Change-Id: Ia27dd5198edb188bc73196ac3fbd6d56ba75812e
jolly at

#28631 (Jun 3, 2026, 10:19:05 AM)

SIMTRACE: Add missing pres_pol to CardEmu_BD_Config message

Change-Id: I443e8151b0aa9bff150222ab6b507ed1f7946768
jolly at

#28630 (Jun 3, 2026, 10:18:56 AM)

CCID: Truncated APDU test

A SELECT APDU must have a header + two bytes of data (what to select).
The test truncates this APDU in all variants, ranging from 6 bytes down
to 0 bytes. The reader may respond with an error caused by invald
request or with and error caused by timeout of the SIM.

Change-Id: I3df2ad9871bccdd03f618a6a457671adb1624590
jolly at

#28629 (Jun 3, 2026, 10:18:51 AM)

CCID: Successful case 2 and 3 APDU tests

A SELECT APDU has data and must respond without any data, just the
status words.

A READ BINARY APDU has no data, but it must respond with data, followed
by the status words.

Change-Id: I9110250020c11bc7382b6308a182c09bb79e5e5e
jolly at

#28628 (Jun 3, 2026, 10:18:36 AM)

CCID: Successful case 1 APDU test

A MANAGE CHANNEL APDU has no data and must respond without any data,
just the status words.

Change-Id: I7d5ee9bbd8bb2505a762e3fd80238db658940c16
jolly at

#28627 (Jun 3, 2026, 10:18:09 AM)

CCID: Successful case 4 APDU test

A GET RESPONSE APDU must respond with the exact number of bytes that
have been indicated by SW2 of the previous SELECT MF APDU.

Change-Id: I88c5ad3285c025f584b1c0296095beb918ab3f4e
jolly at

#28626 (Jun 3, 2026, 10:18:01 AM)

CCID: Fix “unsupported Secure” test case

Expect SlotStatus or DataBlock. The specification states that DataBlock
response is used to indicate, if Secure command is not suppported.
Existing implementation, such as Omnikey Cardman 3121 or
osmo-ccid-firmware respond with SlotStatus instead.

Change-Id: I21517c3e28e0d0e42e8a177b7c668bff15c35aa0
jolly at

#28625 (Jun 3, 2026, 10:17:53 AM)

testenv: move titan_min to testsrcdir.cfg

Adjust the code so it gets titan_min= from testsrcdir.cfg, instead of
having it in testenv.cfg and enforcing that the value is the same across
all files in the same source directory.

While at it, set the default to 11.1.0 (the value that is currently in
all testenv.cfg files), so we don't need to repeat it in all source
directories.

Change-Id: Ife12e3b3294ce16ebedee1b7998d3b89856f0328
Oliver Smith at

#28624 (Jun 3, 2026, 10:17:49 AM)

testenv: move podman_extra to testsrcdir.cfg

Move podman_extra to testsrcdir.cfg, as it also needs to be set for the
whole source directory at once.

We actually didn't have a function that ensures it is the same in all
testenv.cfg files, which could lead to subtle bugs such as setting it in
only one of two testenv_*.cfg files in a source directory and then
having testenv pick the file where it is not set and therefore not using
the option when starting the podman container that is used for all
testsuites. This problem is resolved with this patch.

Change-Id: I12e187726673e1ca1b1ecfff6b34b1803127be86
Oliver Smith at

#28623 (Jun 3, 2026, 10:17:44 AM)

testenv: introduce testsrcdir.cfg

Source directories can have more than one testenv.cfg file. Some options
have been added to testenv.cfg that are not really specific to a single
testsuite or how it gets executed, but to the whole source directory.

This is not ideal, because we need to have additional code that ensures
these options have the same value across all testenv.cfg files in the
same source directory, and we need functions that just pick the value
from the first of these configs. When we change such a value, we also
need to potentially make the change in multiple files.

Resolve this by introducing a new config file testsrcdir.cfg, that can
be optionally in the source directory, and has options that count for
all testsuites in the same source directory.

Move max_jobs_per_gb_ram= as first option to the new file. The following
patches will move all other source directory specific options to
testsrcdir.cfg.

I have also considered naming the new file testdir.cfg, but the name
"testdir" is already used in the source code for the place where we
execute the individual testsuites after copying configs into that
directory.

Change-Id: I8eceea7b874ce1352e2cc9780b77d2a8e694cd28
Oliver Smith at

#28622 (Jun 3, 2026, 10:17:26 AM)

CCID: Check if parameters keep unchanged, if set without change.

Using SetParameters with the current set of parameter must not cause
them to change.

Change-Id: Id1bf5e58ba910d0633104b3bc3e902ce7d31cb10
jolly at

#28621 (Jun 3, 2026, 9:33:40 AM)

Add DSCP configuration support for each individual ASP

Introduce VTY command to configure the Differentiated Services Code
Point (DSCP) values for each Application Server Process.

If the ASP connection has the role "server", it will inherit the DSCP
settings of the listener, unless it is configured at the ASP connection.

Related: SYS#8071
Change-Id: Ia125a392eec5605553809774162675b5249b8494
Andreas Eversberg at

#28620 (Jun 3, 2026, 9:32:45 AM)

Add test case to verify proper DSCP settings

Related: SYS#8071
Change-Id: I6ac965998433b4d8213cce30fc3fcf8fe485a092
Andreas Eversberg at

#28619 (Jun 3, 2026, 9:32:42 AM)

Add DSCP configuration support for server transport role

Introduce VTY command to configure the Differentiated Services Code
Point (DSCP) values for transport "role" server.

The configured DSCP value is applied to the listener socket. Incoming
socket connections will then automatically inherit these DSCP settings
from the listener socket.

It is not (yet) possible to configure DSCP values for individual active
server connections. The setting applies globally via the listener.
A later patch will allow DSCP configuration of each individual ASP.

Related: SYS#8071
Depends: libosmo-netif.git Change-Id Ic70422ec73c753b61843444582f8665ca42e7a6d
Change-Id: I35eab3672157c318616f51ee3042243aed263d4e
Andreas Eversberg at

#28618 (Jun 2, 2026, 6:59:48 PM)

trx-usrp1: make single daughterboard VTY configurable

Adds the usrp1-singledb enable/disable option to specify the
daughterboard configuration on USRP1 devices. This will allow users
to use single-daughterboard devices without compliling from source to
use the --with-singledb configure option.
Also removed some daughterboard configuration related code that
wasn't being used.
More info in the modified trx-backends.adoc

Change-Id: I618fdcc7fec1ca1e87249992798c265430c177a0
jackleea1b at

#28617 (Jun 2, 2026, 11:58:26 AM)

Add test case to verify proper DSCP settings

Related: SYS#8071
Change-Id: I6ac965998433b4d8213cce30fc3fcf8fe485a092
Andreas Eversberg at

#28616 (Jun 2, 2026, 11:58:23 AM)

Add DSCP configuration support for each individual ASP

Introduce VTY command to configure the Differentiated Services Code
Point (DSCP) values for each Application Server Process.

If the ASP connection has the role "server", it will inherit the DSCP
settings of the listener, unless it is configured at the ASP connection.

Related: SYS#8071
Change-Id: Ia125a392eec5605553809774162675b5249b8494
Andreas Eversberg at

#28615 (Jun 2, 2026, 11:16:28 AM)

Add DSCP configuration support for each individual ASP

Introduce VTY command to configure the Differentiated Services Code
Point (DSCP) values for each Application Server Process.

If the ASP connection has the role "server", it will inherit the DSCP
settings of the listener, unless it is configured at the ASP connection.

Related: SYS#8071
Change-Id: Ia125a392eec5605553809774162675b5249b8494
Andreas Eversberg at

#28614 (Jun 2, 2026, 11:16:26 AM)

Add test case to verify proper DSCP settings

Related: SYS#8071
Change-Id: I6ac965998433b4d8213cce30fc3fcf8fe485a092
Andreas Eversberg at

#28613 (Jun 2, 2026, 11:15:48 AM)

Add DSCP configuration support for server transport role

Introduce VTY command to configure the Differentiated Services Code
Point (DSCP) values for transport "role" server.

The configured DSCP value is applied to the listener socket. Incoming
socket connections will then automatically inherit these DSCP settings
from the listener socket.

It is not (yet) possible to configure DSCP values for individual active
server connections. The setting applies globally via the listener.
A later patch will allow DSCP configuration of each individual ASP.

Related: SYS#8071
Depends: libosmo-netif.git Change-Id Ic70422ec73c753b61843444582f8665ca42e7a6d
Change-Id: I35eab3672157c318616f51ee3042243aed263d4e
Andreas Eversberg at

#28612 (Jun 2, 2026, 10:57:37 AM)

jobs/osmo-ccid-firmware: run hooks for logs

Run the start-hook.sh / stop-hook.sh scripts that store pcscd logs and a
usbmon capture. The jenkins node is configured to allow running these
two scripts with sudo as jenkins user. Store the resulting files as
artifacts.

Related: OS#8011
Change-Id: Id0d9a39fda24813572b979588c0ca22918829ad4
Oliver Smith at

#28611 (Jun 2, 2026, 10:57:32 AM)

jobs/octsim_osmo-ccid-firmware: add timeout arg

For testing the hook scripts (see next patch), it is useful to have a
shorter timeout for some test runs. Make it configurable.

Related: SYS#8011
Change-Id: I3bac142a9e2e5f144ad52ea7c36c05ffbad6f5d1
Oliver Smith at

#28610 (Jun 2, 2026, 9:55:52 AM)

tcap loadshare: move last_asp_idx_sent from cfg to runtime struct

The last_asp_idx_sent is a runtime information and not configurable.
Move it to the other runtime state.

Change-Id: Id52bb0f6c67949b5e03f7ad36996f37a0d25214a
lynxis at

#28609 (Jun 2, 2026, 9:55:49 AM)

vty-tests: Re-introduce the check on the help

With the support of regex within vty tests,
the help message can be checked again.

Depends-on: Iadcd7a8c3677548a6405e098fe53d0614ef2012c (osmo-python-tests)
Change-Id: I3fad268b7a8925f378f6331fcab073637bd80e08
lynxis at

#28608 (Jun 2, 2026, 9:54:50 AM)

tcap loadshare: allow to define the fallback mechanism for unroutable TCAP messages

When a TCAP Continue/End/Abort message is received, but no TCAP session entry can be found
and no valid TCAP range is available for the dtid, the message can be either:

- rejected by returning an error with udts
- routed by round robin to all available ASP of this AS

To define the behaviour, a new vty option is introduced:
```
   tcap-unroutable-sessions (reject-udts | load-share-over-as)
```
Defaults to reject-udts.

Related: SYS#5432
Change-Id: Ic1c876da30b05065a476d3a7c1bbf0680adf55bd
lynxis at

#28607 (Jun 2, 2026, 7:47:21 AM)

trx-usrp1: make single daughterboard VTY configurable

Adds the usrp1-singledb enable/disable option to specify the
daughterboard configuration on USRP1 devices. This will allow users
to use single-daughterboard devices without compliling from source to
use the --with-singledb configure option.
Also removed some daughterboard configuration related code that
wasn't being used.
More info in the modified trx-backends.adoc

Change-Id: I618fdcc7fec1ca1e87249992798c265430c177a0
jackleea1b at

#28606 (Jun 2, 2026, 7:33:36 AM)

trx-usrp1: make single daughterboard VTY configurable

Adds the usrp1-singledb enable/disable option to specify the
daughterboard configuration on USRP1 devices. This will allow users
to use single-daughterboard devices without compliling from source to
use the --with-singledb configure option.
Also removed some daughterboard configuration related code that
wasn't being used.
More info in the modified trx-backends.adoc

Change-Id: I618fdcc7fec1ca1e87249992798c265430c177a0
jackleea1b at

#28605 (Jun 1, 2026, 1:41:22 PM)

Also apply DSCP settings on listening socket

The TOS values should be packets that are sent during handshake.
Therefore the DSCP setting must be applied to the listening socket also.

Related: SYS#8071
Change-Id: Ic70422ec73c753b61843444582f8665ca42e7a6d
Andreas Eversberg at

#28604 (Jun 1, 2026, 1:29:59 PM)

Add test case to verify proper DSCP settings

Related: SYS#8071
Change-Id: I6ac965998433b4d8213cce30fc3fcf8fe485a092
Andreas Eversberg at

#28603 (Jun 1, 2026, 1:12:10 PM)

Add DSCP configuration support for STP client

Introduce VTY command to configure the Differentiated Services Code
Point (DSCP) values for the STP clients.

Related: SYS#8071
Change-Id: Ia125a392eec5605553809774162675b5249b8494
Andreas Eversberg at

#28602 (Jun 1, 2026, 1:11:31 PM)

Add test case to verify proper DSCP settings

Related: SYS#8071
Change-Id: I6ac965998433b4d8213cce30fc3fcf8fe485a092
Andreas Eversberg at

#28601 (Jun 1, 2026, 12:48:17 PM)

Add DSCP configuration support for STP client

Introduce VTY command to configure the Differentiated Services Code
Point (DSCP) values for the STP clients.

Related: SYS#8071
Change-Id: Ia125a392eec5605553809774162675b5249b8494
Andreas Eversberg at

#28600 (Jun 1, 2026, 12:48:15 PM)

Add test case to verify proper DSCP settings

Related: SYS#8071
Change-Id: I6ac965998433b4d8213cce30fc3fcf8fe485a092
Andreas Eversberg at

#28599 (Jun 1, 2026, 12:47:40 PM)

Add DSCP configuration support for STP server

Introduce VTY command to configure the Differentiated Services Code
Point (DSCP) values for the STP server.

Related: SYS#8071
Change-Id: I35eab3672157c318616f51ee3042243aed263d4e
Andreas Eversberg at

#28598 (Jun 1, 2026, 12:07:13 PM)

Add DSCP configuration support for STP client

Introduce VTY command to configure the Differentiated Services Code
Point (DSCP) values for the STP clients.

Related: SYS#8071
Change-Id: Ia125a392eec5605553809774162675b5249b8494
Andreas Eversberg at

#28597 (Jun 1, 2026, 12:07:10 PM)

Add DSCP configuration support for STP server

Introduce VTY command to configure the Differentiated Services Code
Point (DSCP) values for the STP server.

Related: SYS#8071
Change-Id: I35eab3672157c318616f51ee3042243aed263d4e
Andreas Eversberg at

#28596 (Jun 1, 2026, 12:06:33 PM)

Add test case to verify proper DSCP settings

Related: SYS#8071
Change-Id: I6ac965998433b4d8213cce30fc3fcf8fe485a092
Andreas Eversberg at

#28595 (Jun 1, 2026, 9:42:10 AM)

CCID: Successful case 1 APDU test

A MANAGE CHANNEL APDU has no data and must respond without any data,
just the status words.

Change-Id: I7d5ee9bbd8bb2505a762e3fd80238db658940c16
Andreas Eversberg at

#28594 (Jun 1, 2026, 9:42:06 AM)

CCID: Disable set/reset parameter tests

These tests are currently not supported by octsim, so they are disabled.

Change-Id: Iebcfe05742d53941f2cbc758c2414d4372068a61
Andreas Eversberg at

#28593 (Jun 1, 2026, 9:42:02 AM)

CCID: Successful case 4 APDU test

A GET RESPONSE APDU must respond with the exact number of bytes that
have been indicated by SW2 of the previous SELECT MF APDU.

Change-Id: I88c5ad3285c025f584b1c0296095beb918ab3f4e
Andreas Eversberg at

#28592 (Jun 1, 2026, 9:41:56 AM)

CCID: Check if reader accepts highest P3 value 0xff

This test should ensure that there is no buffer overflow when receiving
large responses from SIM.

Change-Id: I298795d791f2964758bd4792e10131f92cf561bc
Andreas Eversberg at

#28591 (Jun 1, 2026, 9:41:52 AM)

CCID: Check if parameters keep unchanged, if set without change.

Using SetParameters with the current set of parameter must not cause
them to change.

Change-Id: Id1bf5e58ba910d0633104b3bc3e902ce7d31cb10
Andreas Eversberg at

#28590 (Jun 1, 2026, 9:41:47 AM)

CCID: Integrate SIMTRACE emulation into test cases

This integration allows to add tests that use SIMtrace hardware instead
of a physical SIM. These tests can be used to test handling of invalid
behaviors, such as invalid responses or timeouts.

The number of slots (mp_use_slot_count) are reduced to 7, so that the
8th slot can be used with a SIMtrace for subsequent tests.

Change-Id: Ia27dd5198edb188bc73196ac3fbd6d56ba75812e
Andreas Eversberg at

#28589 (Jun 1, 2026, 9:41:43 AM)

CCID: Check if reader restarts WWT upon NULL procedure byte

The reader will receive a NULL procedure byte every 0.2 for a long time.
The reader may only respond with a status that time extension was
requested. At the end the SIM proceeds with a valid response. This
response must be returned by the reader.

Change-Id: I4eb09e86f88df19d96e9ec55872654352ca2ebd5
Andreas Eversberg at

#28588 (Jun 1, 2026, 9:41:39 AM)

CCID: Truncated APDU test

A SELECT APDU must have a header + two bytes of data (what to select).
The test truncates this APDU in all variants, ranging from 6 bytes down
to 0 bytes. The reader may respond with an error caused by invald
request or with and error caused by timeout of the SIM.

Change-Id: I3df2ad9871bccdd03f618a6a457671adb1624590
Andreas Eversberg at

#28587 (Jun 1, 2026, 9:41:35 AM)

CCID: Check if reader handles truncated SIM response

The reader knows how many byte of data is expected in the SIM response.
The emulated SIM will truncate that response, so that some data and the
final status words are not sent by the SIM. The tests expects the
reader to time out and return an appropriate error core.

Change-Id: I6db6d7889a1355ee9aa2005e676fed5d20a3f2dc
Andreas Eversberg at

#28586 (Jun 1, 2026, 9:41:31 AM)

CCID: Check if reader handles special P3 value 0x00 correctly

If data is requested from SIM with P3 set 0x00, it means that 256
bytes are requested. The reader will receive a procedure byte, which
must cause it to receive all 256 data bytes + two status words.

Change-Id: Icc3fd1937b9829fcf825c58d7b676aa2be2c48e7
Andreas Eversberg at

#28585 (Jun 1, 2026, 9:41:27 AM)

CCID: Successful case 2 and 3 APDU tests

A SELECT APDU has data and must respond without any data, just the
status words.

A READ BINARY APDU has no data, but it must respond with data, followed
by the status words.

Change-Id: I9110250020c11bc7382b6308a182c09bb79e5e5e
Andreas Eversberg at

#28584 (Jun 1, 2026, 9:41:21 AM)

CCID: Add test to verify a working Simtrace setup

This test checks if a valid request is forwarded to SIMtrace and a
valid response is returned back to the reader.

Change-Id: I19264bc257024e9028996e417ff23bbbaebf5f92
Andreas Eversberg at

#28583 (Jun 1, 2026, 9:41:16 AM)

CCID: Check if reader sends request TPDU with maximum size

The maximum size of a request TPDU can have 5 bytes header and 255 bytes
data. It is expected that the reader transmits all bytes to SIM without
failure.

Change-Id: I7c1cb52b578c19d6c0ec1493e45f6ed9c43735b4
Andreas Eversberg at

#28582 (Jun 1, 2026, 9:41:11 AM)

CCID: Check response of reader with empty SIM carrier

The reader has a SIM carrier inserted, but there is no response from the
SIM while expecting the ATR. The reader will get a timeout and is
expected to respond with a suitable error code.

The test uses the slot with the SIMtrace inserted. The SIMtrace will not
respond with an ATR. This way there is no (extra) empty slot required
for this test.

Change-Id: Ifebdcce8f9dd9a51de5a5cb6cf223041d5c38622
Andreas Eversberg at

#28581 (Jun 1, 2026, 9:41:08 AM)

SIMTRACE: Increase USB receive buffer size

The maximum SIM request data can be 255 bytes. Additionally, the
SIMtrace PDU header is 14 bytes. So increase the buffer to 269 bytes.

Change-Id: I05261b4a754b4892955d0b4e426bd32be261efa7
Andreas Eversberg at

#28580 (Jun 1, 2026, 9:41:04 AM)

SIMTRACE: Add missing pres_pol to CardEmu_BD_Config message

Change-Id: I443e8151b0aa9bff150222ab6b507ed1f7946768
Andreas Eversberg at

#28579 (Jun 1, 2026, 9:41:00 AM)

CCID: Fix “unsupported Secure” test case

Expect SlotStatus or DataBlock. The specification states that DataBlock
response is used to indicate, if Secure command is not suppported.
Existing implementation, such as Omnikey Cardman 3121 or
osmo-ccid-firmware respond with SlotStatus instead.

Change-Id: I21517c3e28e0d0e42e8a177b7c668bff15c35aa0
Andreas Eversberg at

#28578 (Jun 1, 2026, 9:40:54 AM)

CCID: Check if reader handles Abort correctly

This test fails with osmo-ccid-firmware, because it is not yet
implemented.

Change-Id: Iebe97e73497b8468ebf08faf2c4db700fc76997f
Andreas Eversberg at

#28577 (Jun 1, 2026, 9:40:48 AM)

CCID: Send procedure byte, when not expected

A case 1 APDU does not request any data from SIM to return. The SIM will
only return a status byte with no procedure byte in advance.

The test sends a procedure byte in advance of the two status bytes
towards the reader. The reader expects SW1 instead of the status byte,
so that it returns it as SW1.

Change-Id: Icffd48d99f0eb48e0898efb027854eba8c22f4a4
Andreas Eversberg at

#28576 (Jun 1, 2026, 9:39:49 AM)

CCID: Check if reader times out while expecting status words

A case 1 APDU is sent toward the reader. The reader expects two status
words. If none of these are sent by the SIM the reader must timeout and
send an error message back to the host.

Change-Id: I054b56a9e2f10e5b984ad0398efb4be5696ce16c
Andreas Eversberg at

#28575 (Jun 1, 2026, 9:39:42 AM)

CCID: Send a wrong procedure byte towards the reader

A case 3 request is send and a response with data is expected, but the
first byte replied by the sim is not a procedure byte, nor a valid
status byte.

This text expects the reader to return an error that states an incorrect
received procedure byte.

Change-Id: Iaa0bd8845b3408fba309874fe41c855d8e7efccc
Andreas Eversberg at

#28574 (Jun 1, 2026, 9:39:38 AM)

CCID: Check if reader times out while expecting procedure byte

A case 3 APDU is sent toward the reader. The reader expects a procedure
byte or a status word. If none of these are sent by the SIM the reader
must timeout and send an error message back to the host.

Change-Id: Iacd6aacaf8220e69b9b7038e354d54c788d1eb05
Andreas Eversberg at

#28573 (Jun 1, 2026, 8:21:16 AM)

C5G: Release UE Context before sending Service request

A recent fix in Open5GS rejects RAN_UE_NGAP_ID in InitialUEMessage. This
causes all tests to fail that send a subsequent InitialUEMessage with
the same RAN_UE_NGAP_ID.

Release the UE Context before re-using the RAN_UE_NGAP_ID, because the
connection handler can only handle one context at a time.

Note that the AMF_UE_NGAP_ID is incremented by Open5GS for every
context.

This fixes:
    TC_ue_service_request_cm_idle_inact_sess
    TC_ue_service_request_cm_idle_ul_data
    TC_ue_service_request_cm_idle_unknown_sess_active

Related: Open5GS Issues #4481
Change-Id: If6fae56487aebd810c51cbab170d95d5dec7e138
Andreas Eversberg at

#28572 (May 28, 2026, 4:42:06 PM)

ccid: reject invalid bClockCommand

Change-Id: I34dedcaaaf3cd67e22b207016f08e745736dd625
ewild at

#28571 (May 28, 2026, 4:42:02 PM)

ccid: ICC_MUTE instead of CMD_NOT_SUPPORTED on XfrBlock to unpowered slot

The command is supported, just currently impossible.

Closes:OS#7015
Change-Id: I7f64475b023bd2b6fd1c4263850e56dd84d20b3e
ewild at

#28570 (May 28, 2026, 4:41:59 PM)

usb: properly handle data toggle bit

Same config SetConfig is currently not properly handled and stale toggle
bits lead to weird transfers until USB resyncs because the asf4 code itself
does not properly handle the toggle bit.

- USB 2.0 §9.4.5 states that ClearFeature(ENDPOINT_HALT) unconditionally
resets the data toggle to DATA0
- USB 2.0 §9.1.1.5 demands toggle reset even when the same config/interface
is selected

The old code was only doing a proper reset upon receiving a bus reset,
but the actual state reset path outlined in the spec is the set config command.
The easy fix here is to split the existing reset code which already does
everything we need into two parts for the actual usb reset and SetConfig.

The current halt clear code only resets DTGL if the endpoint is
actually halted and a fix is a bit more complicated.
_usb_d_dev_ep_stall_clr() is also called from the SETUP-packet cleanup
path in hal_usb_device.c
    _usb_d_dev_ep_stall(ep, USB_EP_STALL_CLR);
    _usb_d_dev_ep_stall(ep | USB_EP_DIR, USB_EP_STALL_CLR);

This runs on every SETUP packet as defensive cleanup of any
leftover stall from a previous failed transfer. That might be why the
asf4 usb code is wrong, because a toggle reset here breaks SETUP.

So the unconditional DTGL reset for halt clearing must therefore happen
in _usb_d_ep_halt_clr itself, which is only reached via the ClearFeature
host request (usbdc_clear_ftr_req -> usb_d_ep_halt(HALT_CLR)),
using a small HPL helper function.

Closes:OS#7016
Change-Id: I5dbca9bd2212407108b44815ecf566fc9c22336d
ewild at

#28569 (May 28, 2026, 4:41:55 PM)

7816fsm: fail PPS on invalid first byte in PPS_S_WAIT_PPSX

Change-Id: I5b74b8443a98224c0c95a664a886066495d8b64a
ewild at

#28568 (May 28, 2026, 4:41:52 PM)

7816fsm: reset stale cuart state on FSM RESET entry

Reset paths reached without power-cycling (WTIME_EXP, HW_ERR,
CARD_REMOVAL during a warm reset) leave the cuart with stale tx_busy,
rx_threshold and wtime_etu from the prior transaction. The next ATR
then hits card_uart_tx tx_busy assertion, or the ATR receive stalls
because the 33-byte ATR can never reach a multi-byte rx_threshold
left from a TPDU.

The new card_uart_tx_abort() clears tx_busy + rx_after_tx_compl + WT,
without driving a synthetic TX_COMPLETE through the FSM.

iso7816_3_reset_onenter is the right place to do this alongside
rx_threshold=1 and wtime_etu=default, this mirrors what
card_uart_ctrl(POWER_*=0) already does, but for the warm-reset paths
that don't touch power.

Change-Id: Iac8bd7f4f0eecccc9acce149277a4f5016fec7c1
ewild at

#28567 (May 28, 2026, 4:41:49 PM)

7816fsm: state_chg before card_uart_tx in tpdu_s_procedure_action

State change must precede the TX to ensure we don't lose
TX_COMPLETE notifications that arrive at a bad time.

Change-Id: Id66f836452674209e25dc3ee4c37d616de30001b
ewild at

#28566 (May 28, 2026, 4:41:45 PM)

cuart: Fix waiting time to be per-byte instead of total timeout

The previous code multiplied WT by the number of expected bytes,
creating a total timeout proportional to the transfer size. This works
fine for (currently unsupported) high baud rates, but it makes it look
like the reader "freezes" at default rates due to the very long delay.

Just reset it upon rx and do not multiply it so it behaves as expected.

Closes:OS#7012
Change-Id: Ic00040b88e1b204db3f4f3edad09878aa28d35a1
ewild at

#28565 (May 28, 2026, 4:41:04 PM)

7816fsm: Handle unexpected procedure bytes gracefully

Dispatch TPDU_FAILED_IND and don't assert for wrong procedure bytes.

Closes:SYS#8050
Change-Id: Ic53814540775f902fce644a5565a7bd2f177a7fe
ewild at

#28564 (May 28, 2026, 4:40:59 PM)

libosmo_emb: type-safe tearfree_u64_t wrapper for LDRD/STRD access

Although types are frowned upon because memorizing all differerent flavors
of void* is the usual way to get acquainted with any mature C code base
some heretics decided to introduce generics in C11, which can be used to
make aligned access (which guarantees tear-free/restartable 64 bit access
on cortex m4) less exciting.

Change-Id: I458bfaf53e27c51882c7a8c1326e51d12943b0bb
ewild at

#28562 (May 28, 2026, 8:00:52 AM)

C5G: Release UE Context before sending Service request

A recent fix in Open5GS rejects RAN_UE_NGAP_ID in InitialUEMessage. This
causes all tests to fail that send a subsequent InitialUEMessage with
the same RAN_UE_NGAP_ID.

Release the UE Context before re-using the RAN_UE_NGAP_ID, because the
connection handler can only handle one context at a time.

Note that the AMF_UE_NGAP_ID is incremented by Open5GS for every
context.

This fixes:
    TC_ue_service_request_cm_idle_inact_sess
    TC_ue_service_request_cm_idle_ul_data
    TC_ue_service_request_cm_idle_unknown_sess_active

Related: Open5GS Issues #4481
Change-Id: If6fae56487aebd810c51cbab170d95d5dec7e138
Andreas Eversberg at

#28561 (May 27, 2026, 7:21:35 PM)

tcap loadshare: move last_asp_idx_sent from cfg to runtime struct

The last_asp_idx_sent is a runtime information and not configurable.
Move it to the other runtime state.

Change-Id: Id52bb0f6c67949b5e03f7ad36996f37a0d25214a
lynxis at

#28560 (May 27, 2026, 7:21:30 PM)

vty-tests: Re-introduce the check on the help

With the support of regex within vty tests,
the help message can be checked again.

Depends-on: Iadcd7a8c3677548a6405e098fe53d0614ef2012c (osmo-python-tests)
Change-Id: I3fad268b7a8925f378f6331fcab073637bd80e08
lynxis at

#28559 (May 27, 2026, 7:19:18 PM)

tcap loadshare: allow to define the fallback mechanism for unroutable TCAP messages

When a TCAP Continue/End/Abort message is received, but no TCAP session entry can be found
and no valid TCAP range is available for the dtid, the message can be either:

- rejected by returning an error with udts
- routed by round robin to all available ASP of this AS

To define the behaviour, a new vty option is introduced:
```
   tcap-unroutable-sessions (reject-udts | load-share-over-as)
```
Defaults to reject-udts.

Related: SYS#5432
Change-Id: Ic1c876da30b05065a476d3a7c1bbf0680adf55bd
lynxis at

#28558 (May 27, 2026, 7:14:32 PM)

vty-tests: remove help from expected output

Until the vty tests support regex, remove the help message
as it depends on the compile option TCAP Routing and can't
handle both compile options.

It will be re-introduced later

Change-Id: I0d8141c00525f49c0a9f9f63b73fee531f591e5c
lynxis at

#28557 (May 27, 2026, 7:14:27 PM)

vty-tests: Re-introduce the check on the help

With the support of regex within vty tests,
the help message can be checked again.

Depends-on: Iadcd7a8c3677548a6405e098fe53d0614ef2012c (osmo-python-tests)
Change-Id: I3fad268b7a8925f378f6331fcab073637bd80e08
lynxis at

#28556 (May 27, 2026, 7:12:46 PM)

tcap loadshare: allow to define the fallback mechanism for unroutable TCAP messages

When a TCAP Continue/End/Abort message is received, but no TCAP session entry can be found
and no valid TCAP range is available for the dtid, the message can be either:

- rejected by returning an error with udts
- routed by round robin to all available ASP of this AS

To define the behaviour, a new vty option is introduced:
```
   tcap-unroutable-sessions (reject-udts | load-share-over-as)
```
Defaults to reject-udts.

Related: SYS#5432
Change-Id: Ic1c876da30b05065a476d3a7c1bbf0680adf55bd
lynxis at

#28555 (May 27, 2026, 7:11:59 PM)

tcap loadshare: move last_asp_idx_sent from cfg to runtime struct

The last_asp_idx_sent is a runtime information and not configurable.
Move it to the other runtime state.

Change-Id: Id52bb0f6c67949b5e03f7ad36996f37a0d25214a
lynxis at

#28554 (May 27, 2026, 6:13:44 PM)

osmo_interact: improve vty transcript language by a regular rexex

Currently the transcript language understand 3 different tokens:
... (ignore all lines until the following line matches)
... !REGEX (ignore all lines except REXEX)

But to support osmo-stp with different compile options, the
vty help is indented with different amount of spaces depending on the compile options.
To support those add a regular regex using the prefix !r!

E.g.
```
OsmoSTP(config-cs7-as)# ?
-  description       Save human-readable description of the object
vs
+  description               Save human-readable description of the object
```

To use the new regex, the line would be:
```
!r!  description[ ]+Save human-readable description of the object
```

Further all regex special characters needs to be escaped.
```
  description   Save human-readable description of the object (for humans)

!r!  description[ ]+Save human-readable description of the object \(for humans\)
```

Change-Id: Iadcd7a8c3677548a6405e098fe53d0614ef2012c
lynxis at

#28553 (May 27, 2026, 3:47:54 PM)

fix(ts_51_011): fix lifecycle decoding

- implement proper LCS decoding per TS 102 221 / TS 31.101
- previous implementation misclassified multiple states

Related: OS#7018
Change-Id: I8a3bd820b9fbc13c025f8302d1d2eac21686c541
pmaier@sysmocom.de at

#28552 (May 27, 2026, 3:47:50 PM)

fix(ts_51_011): apply correct access conditions length

When the access conditions are extracted from resp_bin, the wrong length
is used and only 2 bytes instead of 3 are extracted.

3GPP TS 51.011, section 9.2.1, table below "Response parameters/data
in case of an EF", clearly states that the length should be 3 bytes
(position 9-11)

Related: OS#7018
Change-Id: I410fb58c395beafba8de6d5ab4e71452f424cdf2
pmaier@sysmocom.de at

#28551 (May 27, 2026, 3:47:46 PM)

pySim/ts_51_011: rewrite comment for better understanding

The comment reads like that we were applying TS 102.221 here, but we only
mean our internal decoding format. The spec that actually matters here is
TS 51.011. Let's rephrase the comment so that this becomes more clear.

Related: OS#7018
Change-Id: Ie0184eea25f4d9f4baf9ab137c53a926edba2bf8
pmaier@sysmocom.de at

#28550 (May 27, 2026, 3:47:42 PM)

unittests: add testcases for decode_select_response

A CardProfile class usually contains a static method decode_select_response.
Unfortunately those methods have no unit-test coverage yet. Let's add unit
tests for the decoders in CardProfileSIM and CardProfileUICC.

Related: OS#7018
Change-Id: Id2b5e005d7ad30d56c5c936e612600213620a0ed
pmaier@sysmocom.de at

#28549 (May 27, 2026, 2:39:04 PM)

C5G: Release UE Context before sending Service request

A recent fix in Open5GS rejects RAN_UE_NGAP_ID in InitialUEMessage. This
causes all tests to fail that send a subsequent InitialUEMessage with
the same RAN_UE_NGAP_ID.

Release the UE Context before re-using the RAN_UE_NGAP_ID, because the
connection handler can only handle one context at a time.

Note that the AMF_UE_NGAP_ID is incremented by Open5GS for every
context.

This fixes:
    TC_ue_service_request_cm_idle_inact_sess
    TC_ue_service_request_cm_idle_ul_data
    TC_ue_service_request_cm_idle_unknown_sess_active

Related: Open5GS Issues #4481
Change-Id: If6fae56487aebd810c51cbab170d95d5dec7e138
Andreas Eversberg at

#28548 (May 27, 2026, 2:38:59 PM)

NGAP: Add UESecurityCapabilities IE to PathSwitchRequestAcknowledge

This IE is now used by Open5GS, so add it to the receive template.

This fixes C5G_Tests.TC_handover_inter_ngran_xn.

Note that there is also a pull request to fix the location of this IE in
Open5GS. (https://github.com/open5gs/open5gs/pull/4589) Without this fix
the test case will fail.

Change-Id: Ic46f201db3dcf84a7d62fb1cd17c839ef540e8bb
Andreas Eversberg at

#28547 (May 27, 2026, 2:28:37 PM)

unittests: add testcases for decode_select_response

A CardProfile class usually contains a static method decode_select_response.
Unfortunately those methods have no unit-test coverage yet. Let's add unit
tests for the decoders in CardProfileSIM and CardProfileUICC.

Related: OS#7018
Change-Id: Id2b5e005d7ad30d56c5c936e612600213620a0ed
pmaier@sysmocom.de at

#28546 (May 27, 2026, 2:28:35 PM)

pySim/ts_51_011: rewrite comment for better understanding

The comment reads like that we were applying TS 102.221 here, but we only
mean our internal decoding format. The spec that actually matters here is
TS 51.011. Let's rephrase the comment so that this becomes more clear.

Related: OS#7018
Change-Id: Ie0184eea25f4d9f4baf9ab137c53a926edba2bf8
pmaier@sysmocom.de at

#28545 (May 27, 2026, 2:28:33 PM)

fix(ts_51_011): apply correct access conditions length

When the access conditions are extracted from resp_bin, the wrong length
is used and only 2 bytes instead of 3 are extracted.

3GPP TS 51.011, section 9.2.1, table below "Response parameters/data
in case of an EF", clearly states that the length should be 3 bytes
(position 9-11)

Related: OS#7018
Change-Id: I410fb58c395beafba8de6d5ab4e71452f424cdf2
pmaier@sysmocom.de at

#28544 (May 27, 2026, 2:28:30 PM)

fix(ts_51_011): fix lifecycle decoding

- implement proper LCS decoding per TS 102 221 / TS 31.101
- previous implementation misclassified multiple states

Related: OS#7018
Change-Id: I8a3bd820b9fbc13c025f8302d1d2eac21686c541
pmaier@sysmocom.de at

#28543 (May 27, 2026, 12:14:03 PM)

firmware: replace libnewlib with picolibc

libnewlib-arm-none-eabi has been removed in debian unstable, build the
firmware with picolibc instead.

Fixes: OS#7017
Change-Id: If136397b71435ea0850002ef6406067962e8d4d7
Oliver Smith at

#28542 (May 27, 2026, 12:14:01 PM)

firmware/Makefile: remove -Wredundant-decls

picolibc has redundant declarations of free and strdtold, which results
in lots of warnings with -Wredundant-decls. Adjust CFLAGS to remove
-Wredundant-decls to make the compiler log more readable.

  /usr/lib/picolibc/arm-none-eabi/include/stdlib.h:147:9: warning: redundant redeclaration of 'free' [-Wredundant-decls]
    147 | void    free (void *) __nothrow;
        |         ^~~~
  /usr/lib/picolibc/arm-none-eabi/include/stdlib.h:99:9: note: previous declaration of 'free' with type 'void(void *)'
     99 | void    free (void *) __nothrow;
        |         ^~~~
  /usr/lib/picolibc/arm-none-eabi/include/stdlib.h:307:9: warning: redundant redeclaration of 'strtold' [-Wredundant-decls]
    307 |         strtold (const char *__restrict, char **__restrict);
        |         ^~~~~~~
  /usr/lib/picolibc/arm-none-eabi/include/stdlib.h:286:9: note: previous declaration of 'strtold' with type 'long double(const char * restrict,  char ** restrict)'
    286 |         strtold (const char *__restrict __n, char **__restrict __end_PTR);
        |         ^~~~~~~

Change-Id: I32ff78f2a27191d1c6e114429d2e0713674732fe
Oliver Smith at

#28541 (May 27, 2026, 8:23:39 AM)

osmo-smdpp.py: use commonpath in transversal check

Use commonpath, as commonprefix allows accessing a sibiling directory
with the same prefix.

Change-Id: I7a42b40aa2bbcd5f0ec99f172503354c6eaa9828
Oliver Smith at

#28540 (May 27, 2026, 8:04:24 AM)

osmo-smdpp.py: use commonpath in transversal check

Use commonpath, as commonprefix allows accessing a sibiling directory
with the same prefix.

Change-Id: I7a42b40aa2bbcd5f0ec99f172503354c6eaa9828
Oliver Smith at

#28539 (May 26, 2026, 2:39:30 PM)

octsim: blink SYSTEM LED with Timer Counter 0

Sadly the LED is connected to a GPIO doesn't have useful functions.
The only other function is ETM tracing.
The GPIO can't be controlled by a Timer Counter (TC) or
Timer Counter for Control (TCC) because only certain GPIOs
are able to be controlled by it.

Use a Timer Counter to count the time in one-shot mode
and trigger the LED from the main main loop.
This has the advantage of keeping the interference to a minimum in difference
to a Timer Counter interrupt.
Additional by using the ARM core to change the LED, it can be used as heart beat,
if the LED blinks, the ARM core is still 'alive'.

There are other possibilities to trigger the LED:
- use a TC to trigger the Event System, which toggles the GPIO.
- use a TC to trigger the DMA engine, which transfer 1 byte toggles the GPIO.

Change-Id: I8144120d07f73356855d084016edcb77d202da7f
lynxis at

#28538 (May 26, 2026, 1:53:35 PM)

obs/wireshark: use osmocom branches instead of private

The used branches should be osmocom branches and not a private
branch of a developer.

Change-Id: I6554a87b715d6013c2cfa92982c87d334c1764b9
lynxis at

#28537 (May 26, 2026, 1:50:15 PM)

octsim_osmo-ccid-firmware: improve comment

Change-Id: I29bbe954d242b04cd96beaa8f251274f946af1c9
lynxis at

#28536 (May 26, 2026, 11:44:24 AM)

vty-tests: Re-introduce the check on the help

With the support of regex within vty tests,
the help message can be checked again.

Depends-on: Iadcd7a8c3677548a6405e098fe53d0614ef2012c (osmo-python-tests)
Change-Id: I3fad268b7a8925f378f6331fcab073637bd80e08
lynxis at

#28535 (May 26, 2026, 11:41:04 AM)

tcap loadshare: allow to define the fallback mechanism for unroutable TCAP messages

When a TCAP Continue/End/Abort message is received, but no TCAP session entry can be found
and no valid TCAP range is available for the dtid, the message can be either:

- rejected by returning an error with udts
- routed by round robin to all available ASP of this AS

To define the behaviour, a new vty option is introduced:
```
   tcap-unroutable-sessions (reject-udts | load-share-over-as)
```
Defaults to reject-udts.

Related: SYS#5432
Change-Id: Ic1c876da30b05065a476d3a7c1bbf0680adf55bd
lynxis at

#28534 (May 26, 2026, 11:41:02 AM)

vty-tests: Re-introduce the check on the help

With the support of regex within vty tests,
the help message can be checked again.

Depends-on: Iadcd7a8c3677548a6405e098fe53d0614ef2012c (osmo-python-tests)
Change-Id: I3fad268b7a8925f378f6331fcab073637bd80e08
lynxis at

#28533 (May 26, 2026, 11:40:59 AM)

tcap loadshare: move last_asp_idx_sent from cfg to runtime struct

The last_asp_idx_sent is a runtime information and not configurable.
Move it to the other runtime state.

Change-Id: Id52bb0f6c67949b5e03f7ad36996f37a0d25214a
lynxis at

#28532 (May 26, 2026, 11:39:34 AM)

vty-tests: remove help from expected output

Until the vty tests support regex, remove the help message
as it depends on the compile option TCAP Routing and can't
handle both compile options.

It will be re-introduced later

Change-Id: I0d8141c00525f49c0a9f9f63b73fee531f591e5c
lynxis at

#28531 (May 26, 2026, 10:13:20 AM)

tcap loadshare: allow to define the fallback mechanism for unroutable TCAP messages

When a TCAP Continue/End/Abort message is received, but no TCAP session entry can be found
and no valid TCAP range is available for the dtid, the message can be either:

- rejected by returning an error with udts
- routed by round robin to all available ASP of this AS

To define the behaviour, a new vty option is introduced:
```
   tcap-unroutable-sessions (reject-udts | load-share-over-as)
```
Defaults to reject-udts.

Related: SYS#5432
Change-Id: Ic1c876da30b05065a476d3a7c1bbf0680adf55bd
lynxis at

#28530 (May 26, 2026, 10:13:18 AM)

tcap loadshare: move last_asp_idx_sent from cfg to runtime struct

The last_asp_idx_sent is a runtime information and not configurable.
Move it to the other runtime state.

Change-Id: Id52bb0f6c67949b5e03f7ad36996f37a0d25214a
lynxis at

#28529 (May 26, 2026, 10:12:23 AM)

vty-tests: Re-introduce the check on the help

With the support of regex within vty tests,
the help message can be checked again.

Depends-on: Iadcd7a8c3677548a6405e098fe53d0614ef2012c (osmo-python-tests)
Change-Id: I3fad268b7a8925f378f6331fcab073637bd80e08
lynxis at

#28528 (May 26, 2026, 10:04:31 AM)

tcap loadshare: move last_asp_idx_sent from cfg to runtime struct

The last_asp_idx_sent is a runtime information and not configurable.
Move it to the other runtime state.

Change-Id: Id52bb0f6c67949b5e03f7ad36996f37a0d25214a
lynxis at

#28527 (May 26, 2026, 10:04:29 AM)

tcap loadshare: allow to define the fallback mechanism for unroutable TCAP messages

When a TCAP Continue/End/Abort message is received, but no TCAP session entry can be found
and no valid TCAP range is available for the dtid, the message can be either:

- rejected by returning an error with UTDS
- routed by round robin to all available ASP of this AS

To define the behaviour, a new vty option is introduced:
```
   tcap-unroutable-sessions (reject-utds | load-share-over-as)
```
Defaults to reject-utds.

Related: SYS#5432
Change-Id: Ic1c876da30b05065a476d3a7c1bbf0680adf55bd
lynxis at

#28526 (May 26, 2026, 10:04:28 AM)

vty-tests: remove help from expected output

Until the vty tests support regex, remove the help message
as it depends on the compile option TCAP Routing and can't
handle both compile options.

It will be re-introduced later

Change-Id: I0d8141c00525f49c0a9f9f63b73fee531f591e5c
lynxis at

#28525 (May 26, 2026, 10:02:19 AM)

vty-tests: Re-introduce the check on the help

With the support of regex within vty tests,
the help message can be checked again.

Depends-on: Iadcd7a8c3677548a6405e098fe53d0614ef2012c (osmo-python-tests)
Change-Id: I3fad268b7a8925f378f6331fcab073637bd80e08
lynxis at

#28524 (May 26, 2026, 8:00:27 AM)

Bump version: 1.1.3 → 1.2.0

Change-Id: Icee7895ada6551f4805fc3da114655360698617e
lynxis at

#28523 (May 22, 2026, 1:29:07 PM)

osmo_interact: improve vty transcript language by a regular rexex

Currently the transcript language understand 3 different tokens:
... (ignore all lines until the following line matches)
... !REGEX (ignore all lines except REXEX)

But to support osmo-stp with different compile options, the
vty help is indented with different amount of spaces depending on the compile options.
To support those add a regular regex using the prefix !r!

E.g.
OsmoSTP(config-cs7-as)# ?
-  description       Save human-readable description of the object
vs
+  description               Save human-readable description of the object

Change-Id: Iadcd7a8c3677548a6405e098fe53d0614ef2012c
lynxis at

#28522 (May 22, 2026, 1:29:04 PM)

TCAP loadshare: move last_asp_idx_sent from cfg to runtime struct

The last_asp_idx_sent is a runtime information and not configurable.
Move it to the other runtime state.

Change-Id: Id52bb0f6c67949b5e03f7ad36996f37a0d25214a
lynxis at

#28521 (May 22, 2026, 1:28:03 PM)

TCAP loadshare: allow to define the fallback mechanism for unroutable TCAP messages

When a TCAP Continue/End/Abort message is received, but no TCAP session entry can be found
and no valid TCAP range is available for the dtid, the message can be either:

- rejected by returning an error with UTDS
- routed by round robin to all available ASP of this AS

To define the behaviour, a new vty option is introduced:
```
   tcap-unroutable-sessions (reject-utds | load-share-over-as)
```
Defaults to reject-utds.

Related: SYS#5432
Change-Id: Ic1c876da30b05065a476d3a7c1bbf0680adf55bd
lynxis at

#28520 (May 22, 2026, 1:01:20 PM)

TCAP loadshare: Rework initial selection of a node

The original TCAP loadshare plan was to used the OTID of a TCAP Begin to select
the node.
However this should not be used anymore. Instead the correct one would be to
do a load-sharing across all available ASP and keep this relation ("sticky" sessions).

The counter SS7_AS_CTR_TCAP_ASP_FALLBACK will be re-used by a later patch.

Related: SYS#5432
Change-Id: I151e6acb59e1f3c481487e76d2b01236fcee755f
lynxis at

#28519 (May 22, 2026, 1:01:16 PM)

TCAP loadshare: allow to define the fallback mechanism for unroutable TCAP messages

When a TCAP Continue/End/Abort message is received, but no TCAP session entry can be found
and no valid TCAP range is available for the dtid, the message can be either:

- rejected by returning an error with UTDS
- routed by round robin to all available ASP of this AS

To define the behaviour, a new vty option is introduced:
```
   tcap-unroutable-sessions (reject-utds | load-share-over-as)
```
Defaults to reject-utds.

Related: SYS#5432
Change-Id: Ic1c876da30b05065a476d3a7c1bbf0680adf55bd
lynxis at

#28518 (May 22, 2026, 1:01:13 PM)

ss7_as: fix indention

Related: SYS#5432
Change-Id: Id006f4fcbf9ae6b5b50be3d41fb216c7f9bb2dfb
lynxis at

#28517 (May 22, 2026, 1:01:10 PM)

TCAP loadshare: Add session miss counter

When a non-starting TCAP message (Continue, End, Abort) is received,
the no session could be associated with it, count these as session miss.

Those should not appear under normal operation, except after a restart of osmo-stp.

Related: SYS#5432
Change-Id: I23319294e899e6acb6421d89675ce456048f7475
lynxis at

#28516 (May 22, 2026, 1:00:14 PM)

TCAP loadshare: count all ENOKEY as a FAILED

The ASP should count all message which couldn't routed as failed.

Related: SYS#5432
Change-Id: I8bee6db5c75195855a3d378579e30886cd4d6fa8
lynxis at

#28515 (May 22, 2026, 12:42:01 PM)

tcap_as_loadshare: improve log lines

Change-Id: Idffe9a02127c587aca4123f12f74b657d6911a80
lynxis at

#28514 (May 22, 2026, 12:41:10 PM)

tcap_as_loadshare: improve logging of lookup failures

Change-Id: I80878dfd080c705de28175260cb392186dafed6a
lynxis at

#28513 (May 21, 2026, 10:37:57 AM)

Fix unhandled (un)mapping events

If a mapping event (create slotmap) and an unmapping event (delete
slotmap) exists at the same time, none of these events were handled.
These mappings stayed in 'NEW' state. Subsequent mappings of different
slots were then ignored.

This issue has been reproduced and is fixed with this patch.

Related: SYS#8032
Change-Id: I38da61cd8e9ccd5c79798bdd2196d39dfda8ebed
Andreas Eversberg at

#28512 (May 19, 2026, 3:56:49 PM)

ss7_as: fix indention

Related: SYS#5432
Change-Id: Id006f4fcbf9ae6b5b50be3d41fb216c7f9bb2dfb
lynxis at

#28511 (May 19, 2026, 3:56:46 PM)

TCAP loadshare: Rework initial selection of a node

The TCAP loadshare original used the OTID of a TCAP Begin to select
the node. To improve the load share across the nodes,
use a round robin as initial selection, but "stick" the session
on the particular node.

Related: SYS#5432
Change-Id: I151e6acb59e1f3c481487e76d2b01236fcee755f
lynxis at

#28510 (May 19, 2026, 3:56:43 PM)

TCAP loadshare: Add session miss counter

When a non-starting TCAP message (Continue, End, Abort) is received,
the no session could be associated with it, count these as session miss.

Those should not appear under normal operation, except after a restart of osmo-stp.

Related: SYS#5432
Change-Id: I23319294e899e6acb6421d89675ce456048f7475
lynxis at

#28509 (May 19, 2026, 3:55:45 PM)

TCAP loadshare: count all ENOKEY as a FAILED

The ASP should count all message which couldn't routed as failed.

Related: SYS#5432
Change-Id: I8bee6db5c75195855a3d378579e30886cd4d6fa8
lynxis at

#28508 (May 19, 2026, 12:53:30 PM)

tcap_as_loadshare: improve logging of lookup failures

Change-Id: I80878dfd080c705de28175260cb392186dafed6a
lynxis at

#28507 (May 19, 2026, 12:52:49 PM)

tcap_as_loadshare: improve log lines

Change-Id: Idffe9a02127c587aca4123f12f74b657d6911a80
lynxis at

#28506 (May 19, 2026, 12:37:40 PM)

tests: split tests into own functions

To improve the overview.

Related: SYS#5432
Change-Id: If9db94d17e288875fdaed52ec95b3785a78d5fa6
lynxis at

#28505 (May 19, 2026, 12:37:37 PM)

asn1: remove wireshark sepcific parts

The asn1 file was original copied from the wireshark
dissector.
Remove the wireshark specific parts.

Change-Id: Ie585c71fc14a20f609fa116b6858b9ca538054f5
lynxis at

#28504 (May 19, 2026, 12:37:34 PM)

tests: improve test infrastructure to support multiple test vectors

Related: SYS#5432
Change-Id: I4a69167647dd0a8eb650b4c7cc47fd97928ebf5d
lynxis at

#28503 (May 19, 2026, 12:37:32 PM)

tests: decoding: print the half decoded structure

When the decoding fails, the half decoded structure
also helps understanding the issue.

Realted: SYS#5432
Change-Id: I8f7ff9a8e457395aa12d1c7175f56cfdc5529590
lynxis at

#28502 (May 19, 2026, 12:37:28 PM)

tests: add decode tests for TCAP End tests

Related: SYS#5432
Change-Id: I5679c4a873176d73e973f5cfccff796fe6dbd941
lynxis at

#28501 (May 19, 2026, 10:13:49 AM)

asn1: remove wireshark sepcific parts

The asn1 file was original copied from the wireshark
dissector.
Remove the wireshark specific parts.

Change-Id: Ie585c71fc14a20f609fa116b6858b9ca538054f5
lynxis at

#28500 (May 19, 2026, 10:13:46 AM)

tests: split tests into own functions

To improve the overview.

Related: SYS#5432
Change-Id: If9db94d17e288875fdaed52ec95b3785a78d5fa6
lynxis at

#28499 (May 19, 2026, 10:13:44 AM)

tests: add decode tests for TCAP End tests

Related: SYS#5432
Change-Id: I5679c4a873176d73e973f5cfccff796fe6dbd941
lynxis at

#28498 (May 19, 2026, 10:13:42 AM)

tests: decoding: print the half decoded structure

When the decoding fails, the half decoded structure
also helps understanding the issue.

Realted: SYS#5432
Change-Id: I8f7ff9a8e457395aa12d1c7175f56cfdc5529590
lynxis at

#28497 (May 19, 2026, 10:13:35 AM)

tests: improve test infrastructure to support multiple test vectors

Related: SYS#5432
Change-Id: I4a69167647dd0a8eb650b4c7cc47fd97928ebf5d
lynxis at

#28496 (May 19, 2026, 10:09:20 AM)

tests: improve test infrastructure to support multiple test vectors

Related: SYS#5432
Change-Id: I4a69167647dd0a8eb650b4c7cc47fd97928ebf5d
lynxis at

#28495 (May 19, 2026, 10:09:17 AM)

asn1: remove wireshark sepcific parts

The asn1 file was original copied from the wireshark
dissector.
Remove the wireshark specific parts.

Change-Id: Ie585c71fc14a20f609fa116b6858b9ca538054f5
lynxis at

#28494 (May 19, 2026, 10:09:14 AM)

tests: add decode tests for TCAP End tests

Related: SYS#5432
Change-Id: I5679c4a873176d73e973f5cfccff796fe6dbd941
lynxis at

#28493 (May 19, 2026, 10:09:10 AM)

tests: split tests into own functions

To improve the overview.

Related: SYS#5432
Change-Id: If9db94d17e288875fdaed52ec95b3785a78d5fa6
lynxis at

#28492 (May 19, 2026, 10:09:07 AM)

tests: decoding: print the half decoded structure

When the decoding fails, the half decoded structure
also helps understanding the issue.

Realted: SYS#5432
Change-Id: I8f7ff9a8e457395aa12d1c7175f56cfdc5529590
lynxis at

#28491 (May 19, 2026, 10:08:46 AM)

asn1: Decode ErrorCode as Integer

The ErrorCode is an application 2 tag.

Related: SYS#5432
Change-Id: Ib8afe0dbe8d4436b80c71048f3b572fcda6cd33e
lynxis at

#28490 (May 15, 2026, 4:29:40 PM)

contrib: extend wireshark lua dissector

Still no reassembly, but enough to work with bug report pcaps

Change-Id: Ic78824d6122191c7d16152cea643a238c33f49b1
ewild at

#28489 (May 13, 2026, 4:28:36 PM)

pySim/ara_m: move code from do_aram_ to static methods

The method do_aram_store_ref_ar_do and do_aram_delete_all, which
are part of the nested AddlShellCommands class, may be moved into
the parent class as a static method, just like the already existing
get_config method.

This makes the functionality re-usable to callers that do not use
the CMD2 API.

Change-Id: Icd1b08ec707dd939bc9e8524d7f9431aa4daae7c
Related: SYS#6959
pmaier@sysmocom.de at

#28488 (May 13, 2026, 4:28:33 PM)

pySim/ara_m, cosmetic: swap --nfc-always and --nfc-never options

The commandline options --nfc-always and --nfc-never appear in the
opposite order when compared to --apdu-never and --apdu-always.

Let's swap the options to make the helpscreen and the code more
consistent.

Change-Id: I7289c3628b1b8dd3eec2f1c8f2132e3015422960
Related: SYS#6959
pmaier@sysmocom.de at

#28487 (May 13, 2026, 4:28:29 PM)

pySim/global_platform: make functionality available outside of cmd2

The nested class AddlShellCommands holds methods that encapsulate
the actual functionality from the related do_ method (e.g.
do_store_data calls self.store_data). This is already a good level
of separation but it does not allow us to call those methods from
programs that are not based on cmd2. Let's turn those methods into
functions so that non cmd2 applications have easy access to the
functionality of pySim.global_platform.

Let's also add a pySimLogger, so that we do not have to call
self._cmd.poutput

Related: SYS#6959
Change-Id: Idf4e4b58bf49ba62b2c22de4c49a2dcacfa872cb
pmaier@sysmocom.de at

#28486 (May 13, 2026, 4:04:10 PM)

tests: add decode tests for TCAP End tests

Change-Id: I5679c4a873176d73e973f5cfccff796fe6dbd941
lynxis at

#28485 (May 13, 2026, 4:04:08 PM)

tests: split tests into own functions

To improve overview.

Change-Id: If9db94d17e288875fdaed52ec95b3785a78d5fa6
lynxis at

#28484 (May 13, 2026, 4:04:05 PM)

Radical reduce the asn1 code to the essential parts

Previous it would try to parse the whole message including
the dialog and component.
But the tcap asn1 decode only needs to decode the otid, dtid
and the message type.

Currently the only user is osmo-stp, which doens't need
any other information.

Change-Id: Ib8afe0dbe8d4436b80c71048f3b572fcda6cd33e
lynxis at

#28483 (May 13, 2026, 4:04:00 PM)

tests: improve test infrastructure to support multiple test vectors

Change-Id: I4a69167647dd0a8eb650b4c7cc47fd97928ebf5d
lynxis at

#28482 (May 13, 2026, 3:55:11 PM)

tests: split tests into own functions

To improve overview.

Change-Id: If9db94d17e288875fdaed52ec95b3785a78d5fa6
lynxis at

#28481 (May 13, 2026, 3:55:06 PM)

tests: improve test infrastructure to support multiple test vectors

Change-Id: I4a69167647dd0a8eb650b4c7cc47fd97928ebf5d
lynxis at

#28480 (May 13, 2026, 3:55:03 PM)

tests: add decode tests for TCAP End tests

Change-Id: I5679c4a873176d73e973f5cfccff796fe6dbd941
lynxis at

#28479 (May 12, 2026, 10:37:09 AM)

RemsimServer Tests: give the remsim server some time to update the slotmap

The check of the slotmap can race if it is requests straight away,
because the slotmap might be still in the slotmap list as long the
bankd hasn't responded yet.

Change-Id: I6784e05380d844aa4bb9cde2bbe648ff37bee91b
lynxis at

#28478 (May 12, 2026, 9:01:48 AM)

pySim/global_platform: make functionality available outside of cmd2

The nested class AddlShellCommands holds methods that encapsulate
the actual functionality from the related do_ method (e.g.
do_store_data calls self.store_data). This is already a good level
of separation but it does not allow us to call those methods from
programs that are not based on cmd2. Let's turn those methods into
functions so that non cmd2 applications have easy access to the
functionality of pySim.global_platform.

Let's also add a pySimLogger, so that we do not have to call
self._cmd.poutput

Related: SYS#6959
Change-Id: Idf4e4b58bf49ba62b2c22de4c49a2dcacfa872cb
pmaier@sysmocom.de at