Skip to content

Loading builds...

Changes

#22202 (Jun 17, 2026, 11:50:19 PM)

osmo-bts-trx: shut down on stale clock indication from transceiver

We expect the transceiver to be a reliable, monotonic clock source.
If it reports an FN far behind our local timer (elapsed_fn < 0) while
far more wall-clock time elapsed than its FN advance accounts for,
its clock has likely stalled and the indication carries a stale frame
number.  Acting on it drags the scheduler backwards and re-transmits
already-sent TDMA frames, corrupting lchan-internal state(s).

Detect this and shut down the process, same rationale as the existing
"PC clock skew too high" check in trx_fn_timer_cb().

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Change-Id: If787ab7ed70aa2dcb0389ceb58620c2302c3431a
Related: OS#7020, OS#6794
Vadim Yanitskiy at

#22201 (Jun 17, 2026, 11:50:15 PM)

osmo-bts-trx: shut down on stale clock indication from transceiver

We expect the transceiver to be a reliable, monotonic clock source.
If it reports an FN far behind our local timer (elapsed_fn < 0) while
far more wall-clock time elapsed than its FN advance accounts for,
its clock has likely stalled and the indication carries a stale frame
number.  Acting on it drags the scheduler backwards and re-transmits
already-sent TDMA frames, corrupting lchan-internal state(s).

Detect this and shut down the process, same rationale as the existing
"PC clock skew too high" check in trx_fn_timer_cb().

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Change-Id: If787ab7ed70aa2dcb0389ceb58620c2302c3431a
Related: OS#7020, OS#6794
Vadim Yanitskiy at

#22200 (Jun 17, 2026, 10:28:26 PM)

osmo-bts-trx: reset BTS GSM time on clock (re)start

trx_sched_clock_started() is called when the transceiver is powered
on, e.g. after an A-bis link re-establishment, which in ttcn3-bts-test
happens once per testcase.  The transceiver restarts its TDMA frame
number from ~0, but we only reset the per-TRX clock state (tcs),
leaving bts->gsm_time.fn at the previous epoch's value.

As a result the first (low) FN reported by the transceiver is mistaken
for a huge backwards jump, e.g.:

  l1sap.c:628 Invalid condition detected: Frame difference is 102-10386=2705364 > 1!

Reset bts->gsm_time to FN 0 here so each clock epoch starts clean.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Change-Id: Id8da126e460d3846a3be5bdb271553457fdd0590
Vadim Yanitskiy at

#22199 (Jun 17, 2026, 10:28:24 PM)

osmo-bts-trx: reset BTS GSM time on clock (re)start

trx_sched_clock_started() is called when the transceiver is powered
on, e.g. after an A-bis link re-establishment, which in ttcn3-bts-test
happens once per testcase.  The transceiver restarts its TDMA frame
number from ~0, but we only reset the per-TRX clock state (tcs),
leaving bts->gsm_time.fn at the previous epoch's value.

As a result the first (low) FN reported by the transceiver is mistaken
for a huge backwards jump, e.g.:

  l1sap.c:628 Invalid condition detected: Frame difference is 102-10386=2705364 > 1!

Reset bts->gsm_time to FN 0 here so each clock epoch starts clean.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Change-Id: Id8da126e460d3846a3be5bdb271553457fdd0590
Vadim Yanitskiy at

#22198 (Jun 17, 2026, 1:54:11 PM)

server: do not abort process on short conn message

conn_read_cb() used OSMO_ASSERT() to check that the received
message holds at least a full osmo_pcap_data header.  Although
conn_segmentation_cb2() should only ever hand up complete frames,
asserting on a length derived from network input means a framing
anomaly would abort the entire server (taking down all other clients'
captures).  Close the offending connection gracefully instead,
consistent with the other error paths in this function.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Change-Id: Ia102ff918ef8152d212e10a860f5dc70efec880b
Vadim Yanitskiy at

#22197 (Jun 17, 2026, 1:54:10 PM)

tls: do not treat GNUTLS_E_AGAIN/INTERRUPTED as fatal on read

osmo_tls_client_bfd_cb() treated any non-positive return from
gnutls_record_recv() as a fatal error and tore down the session.  On a
non-blocking socket gnutls_record_recv() can return GNUTLS_E_AGAIN or
GNUTLS_E_INTERRUPTED (both negative but non-fatal), which would drop
an otherwise healthy TLS session.  Handle them as retryable, mirroring
the existing logic in tls_write().

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Change-Id: If2f842b202dd08c07dffe3770c51cf0ce886beee
Vadim Yanitskiy at

#22196 (Jun 17, 2026, 1:54:10 PM)

tls: fix broken certificate hostname verification

verify_cert_cb() retrieved the gnutls session pointer and passed it to
gnutls_certificate_verify_peers3() as the expected hostname.  But the
session pointer is set to the osmo_tls_session struct (it is needed by
cert_callback()), not a hostname string.  Hostname matching was
therefore performed against raw struct bytes, rendering verification
meaningless and potentially reading out of bounds, even when
"tls verify-cert" was enabled.

Store the configured hostname in struct osmo_tls_session and have
verify_cert_cb() read it from there.  Also drop the stray
gnutls_certificate_verify_peers3() call in the client setup: it ran
before any handshake (so there were no peer certificates yet) and its
result was ignored; the real verification happens via the registered
callback during the handshake.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Change-Id: If64950a698bfcfbf556a37ef1be3e68abc124384
Vadim Yanitskiy at

#22195 (Jun 17, 2026, 1:54:09 PM)

server: fix NULL deref of file_hdr_msg when store is disabled

When a connection has storing disabled (no store), conn->file_hdr_msg
is never populated.  The previous link-header handling skipped the
first branch (gated on conn->store) and fell through to the comparison
branch, which dereferenced the still-NULL conn->file_hdr_msg, crashing
the server on the first PKT_LINK_HDR from such a client.

Gate the whole header tracking on conn->store and simply free the
message when not storing, since osmo_pcap_conn_restart_trace() already
no-ops in that case.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Change-Id: I419e1b66d07307c3e49294984887c153cd8494c3
Vadim Yanitskiy at

#22194 (Jun 17, 2026, 1:53:45 PM)

client: fix off-by-one in wrapped pcap stats counter

When a libpcap stats counter (ps_recv/ps_drop/ps_ifdrop) wraps around
UINT_MAX, get_psbl_wrapped_ctr() computed the delta as
(UINT_MAX - old_val) + new_val, omitting the single increment that
takes the counter from UINT_MAX through zero.  Add the missing +1 so
the reported delta matches the real number of increments.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Change-Id: I66581910dbd1e955831a6ff913042059ad4994a7
Vadim Yanitskiy at

#22193 (Jun 17, 2026, 1:53:41 PM)

client: vty: do not print NULL tls hostname

conn->tls_hostname defaults to NULL and can be cleared via "no tls
hostname".  Writing it unconditionally emitted a "tls hostname (null)"
line, producing a config that does not re-parse.  Guard it like the
other optional tls fields.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Change-Id: I5b920337409d8c9fa1edb8d47177882cf0a6c4e7
Vadim Yanitskiy at

#22192 (Jun 17, 2026, 1:53:23 PM)

client: honor IPv4 header length in GPRS filter

The GPRS-NS/BSSGP filter assumed a fixed 20-byte IPv4 header (IP_LEN)
when locating the UDP header and payload.  When the captured packet
carries IPv4 options (ip_hl > 5), udp_data/payload_data pointed into
the middle of the headers and check_gprs() parsed garbage, classifying
packets incorrectly.

Use the actual header length from ip_hl, reject malformed headers
(ip_hl < 5), and re-validate that the larger headers fit within the
captured length before computing the payload.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Change-Id: Iac1fa9cc2a3c06cbe19c3e7799a0b335f2e3dda9
Vadim Yanitskiy at

#22191 (Jun 17, 2026, 1:53:22 PM)

server: fix zmq message leak on send failure

zmq_msg_send() only transfers ownership of the message to ZeroMQ on
success.  On failure the caller retains ownership, so the previously
init'd zmq_msg_t was leaked on every failed publish.  Close it
explicitly on the error path.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Change-Id: I501b1bf55bede4e69fa5d9b3f38d87341482ff49
Vadim Yanitskiy at

#22190 (Jun 17, 2026, 1:53:21 PM)

client: Fix 32-bit overflow when computing pcapng EPB timestamp

tv_sec * 1000 * 1000 was evaluated in int arithmetic.  Where time_t /
tv_sec is 32-bit, this overflows for any tv_sec > ~2147, corrupting
the 64-bit timestamp_usec well before the year 2038.  Cast tv_sec to
uint64_t before the multiplication so the whole expression
is computed in 64 bits.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Change-Id: I20d3282b8cba1675ce2d0860e66027e5ee8245ef
Vadim Yanitskiy at

#22189 (Jun 17, 2026, 1:53:20 PM)

server: vty: validate rotate-localtime modulus against the new interval

apply_rotate_localtime() computed the maximum allowed modulus from
pcap_server->rotate_localtime.intv, the currently-stored (old) interval,
rather than the intv argument being applied.  On first configuration the
stored interval is the default 0, so the switch hit the default case and
rejected an otherwise valid command; when changing intervals the modulus
was bounds-checked against the wrong interval.  Switch on intv instead.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Change-Id: I0b367d4e255db3208b41e12adec682026b99cc18
Vadim Yanitskiy at

#22188 (Jun 17, 2026, 1:53:15 PM)

server: fix msgb leak on duplicate link header

rx_link_hdr() takes ownership of msg on success (rx_link() only frees
it on failure).  Both branches that call update_conn_file_hdr_msg()
free msg, but when an identical link header was already stored neither
branch ran and msg was leaked.

This happens on every duplicate PKT_LINK_HDR, e.g. a client that
periodically resends its header.  Free msg explicitly in that case.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Change-Id: I79344fe942342f2a736878142b3cf036fc982eef
Vadim Yanitskiy at

#22187 (Jun 17, 2026, 1:53:15 PM)

server: fix misleading data length validation log message

The format string "%u < %u <= %u" was printed with arguments
(min_len, data->len, max_len), placing the offending length in
the middle and mislabeling it.  This is confusing.  Let's print
the actual length followed by the expected interval instead.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Change-Id: Ice95c1f8ad1aa8de259364bd70eba0db8918b19e
Vadim Yanitskiy at

#22186 (Jun 17, 2026, 1:53:14 PM)

server: do not abort process on short conn message

conn_read_cb() used OSMO_ASSERT() to check that the received
message holds at least a full osmo_pcap_data header.  Although
conn_segmentation_cb2() should only ever hand up complete frames,
asserting on a length derived from network input means a framing
anomaly would abort the entire server (taking down all other clients'
captures).  Close the offending connection gracefully instead,
consistent with the other error paths in this function.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Change-Id: Ia102ff918ef8152d212e10a860f5dc70efec880b
Vadim Yanitskiy at

#22185 (Jun 17, 2026, 1:53:14 PM)

tls: fix broken certificate hostname verification

verify_cert_cb() retrieved the gnutls session pointer and passed it to
gnutls_certificate_verify_peers3() as the expected hostname.  But the
session pointer is set to the osmo_tls_session struct (it is needed by
cert_callback()), not a hostname string.  Hostname matching was
therefore performed against raw struct bytes, rendering verification
meaningless and potentially reading out of bounds, even when
"tls verify-cert" was enabled.

Store the configured hostname in struct osmo_tls_session and have
verify_cert_cb() read it from there.  Also drop the stray
gnutls_certificate_verify_peers3() call in the client setup: it ran
before any handshake (so there were no peer certificates yet) and its
result was ignored; the real verification happens via the registered
callback during the handshake.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Change-Id: If64950a698bfcfbf556a37ef1be3e68abc124384
Vadim Yanitskiy at

#22184 (Jun 17, 2026, 1:52:51 PM)

tls: do not treat GNUTLS_E_AGAIN/INTERRUPTED as fatal on read

osmo_tls_client_bfd_cb() treated any non-positive return from
gnutls_record_recv() as a fatal error and tore down the session.  On a
non-blocking socket gnutls_record_recv() can return GNUTLS_E_AGAIN or
GNUTLS_E_INTERRUPTED (both negative but non-fatal), which would drop
an otherwise healthy TLS session.  Handle them as retryable, mirroring
the existing logic in tls_write().

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Change-Id: If2f842b202dd08c07dffe3770c51cf0ce886beee
Vadim Yanitskiy at

#22183 (Jun 17, 2026, 1:52:47 PM)

server: fix zmq message leak on send failure

zmq_msg_send() only transfers ownership of the message to ZeroMQ on
success.  On failure the caller retains ownership, so the previously
init'd zmq_msg_t was leaked on every failed publish.  Close it
explicitly on the error path.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Change-Id: I501b1bf55bede4e69fa5d9b3f38d87341482ff49
Vadim Yanitskiy at

#22182 (Jun 17, 2026, 1:52:23 PM)

client: fix off-by-one in wrapped pcap stats counter

When a libpcap stats counter (ps_recv/ps_drop/ps_ifdrop) wraps around
UINT_MAX, get_psbl_wrapped_ctr() computed the delta as
(UINT_MAX - old_val) + new_val, omitting the single increment that
takes the counter from UINT_MAX through zero.  Add the missing +1 so
the reported delta matches the real number of increments.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Change-Id: I66581910dbd1e955831a6ff913042059ad4994a7
Vadim Yanitskiy at

#22181 (Jun 17, 2026, 1:52:23 PM)

client: honor IPv4 header length in GPRS filter

The GPRS-NS/BSSGP filter assumed a fixed 20-byte IPv4 header (IP_LEN)
when locating the UDP header and payload.  When the captured packet
carries IPv4 options (ip_hl > 5), udp_data/payload_data pointed into
the middle of the headers and check_gprs() parsed garbage, classifying
packets incorrectly.

Use the actual header length from ip_hl, reject malformed headers
(ip_hl < 5), and re-validate that the larger headers fit within the
captured length before computing the payload.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Change-Id: Iac1fa9cc2a3c06cbe19c3e7799a0b335f2e3dda9
Vadim Yanitskiy at

#22180 (Jun 17, 2026, 1:52:20 PM)

client: Fix 32-bit overflow when computing pcapng EPB timestamp

tv_sec * 1000 * 1000 was evaluated in int arithmetic.  Where time_t /
tv_sec is 32-bit, this overflows for any tv_sec > ~2147, corrupting
the 64-bit timestamp_usec well before the year 2038.  Cast tv_sec to
uint64_t before the multiplication so the whole expression
is computed in 64 bits.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Change-Id: I20d3282b8cba1675ce2d0860e66027e5ee8245ef
Vadim Yanitskiy at

#22179 (Jun 17, 2026, 1:52:20 PM)

server: fix NULL deref of file_hdr_msg when store is disabled

When a connection has storing disabled (no store), conn->file_hdr_msg
is never populated.  The previous link-header handling skipped the
first branch (gated on conn->store) and fell through to the comparison
branch, which dereferenced the still-NULL conn->file_hdr_msg, crashing
the server on the first PKT_LINK_HDR from such a client.

Gate the whole header tracking on conn->store and simply free the
message when not storing, since osmo_pcap_conn_restart_trace() already
no-ops in that case.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Change-Id: I419e1b66d07307c3e49294984887c153cd8494c3
Vadim Yanitskiy at

#22178 (Jun 17, 2026, 1:52:19 PM)

client: vty: do not print NULL tls hostname

conn->tls_hostname defaults to NULL and can be cleared via "no tls
hostname".  Writing it unconditionally emitted a "tls hostname (null)"
line, producing a config that does not re-parse.  Guard it like the
other optional tls fields.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Change-Id: I5b920337409d8c9fa1edb8d47177882cf0a6c4e7
Vadim Yanitskiy at

#22177 (Jun 17, 2026, 1:52:19 PM)

server: vty: validate rotate-localtime modulus against the new interval

apply_rotate_localtime() computed the maximum allowed modulus from
pcap_server->rotate_localtime.intv, the currently-stored (old) interval,
rather than the intv argument being applied.  On first configuration the
stored interval is the default 0, so the switch hit the default case and
rejected an otherwise valid command; when changing intervals the modulus
was bounds-checked against the wrong interval.  Switch on intv instead.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Change-Id: I0b367d4e255db3208b41e12adec682026b99cc18
Vadim Yanitskiy at

#22176 (Jun 17, 2026, 1:52:18 PM)

server: fix msgb leak on duplicate link header

rx_link_hdr() takes ownership of msg on success (rx_link() only frees
it on failure).  Both branches that call update_conn_file_hdr_msg()
free msg, but when an identical link header was already stored neither
branch ran and msg was leaked.

This happens on every duplicate PKT_LINK_HDR, e.g. a client that
periodically resends its header.  Free msg explicitly in that case.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Change-Id: I79344fe942342f2a736878142b3cf036fc982eef
Vadim Yanitskiy at

#22175 (Jun 17, 2026, 1:52:16 PM)

server: fix misleading data length validation log message

The format string "%u < %u <= %u" was printed with arguments
(min_len, data->len, max_len), placing the offending length in
the middle and mislabeling it.  This is confusing.  Let's print
the actual length followed by the expected interval instead.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Change-Id: Ice95c1f8ad1aa8de259364bd70eba0db8918b19e
Vadim Yanitskiy at

#22174 (Jun 17, 2026, 1:52:14 PM)

server: do not abort process on short conn message

conn_read_cb() used OSMO_ASSERT() to check that the received
message holds at least a full osmo_pcap_data header.  Although
conn_segmentation_cb2() should only ever hand up complete frames,
asserting on a length derived from network input means a framing
anomaly would abort the entire server (taking down all other clients'
captures).  Close the offending connection gracefully instead,
consistent with the other error paths in this function.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Change-Id: Ia102ff918ef8152d212e10a860f5dc70efec880b
Vadim Yanitskiy at

#22173 (Jun 17, 2026, 1:52:12 PM)

tls: fix broken certificate hostname verification

verify_cert_cb() retrieved the gnutls session pointer and passed it to
gnutls_certificate_verify_peers3() as the expected hostname.  But the
session pointer is set to the osmo_tls_session struct (it is needed by
cert_callback()), not a hostname string.  Hostname matching was
therefore performed against raw struct bytes, rendering verification
meaningless and potentially reading out of bounds, even when
"tls verify-cert" was enabled.

Store the configured hostname in struct osmo_tls_session and have
verify_cert_cb() read it from there.  Also drop the stray
gnutls_certificate_verify_peers3() call in the client setup: it ran
before any handshake (so there were no peer certificates yet) and its
result was ignored; the real verification happens via the registered
callback during the handshake.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Change-Id: If64950a698bfcfbf556a37ef1be3e68abc124384
Vadim Yanitskiy at

#22172 (Jun 17, 2026, 1:51:44 PM)

tls: do not treat GNUTLS_E_AGAIN/INTERRUPTED as fatal on read

osmo_tls_client_bfd_cb() treated any non-positive return from
gnutls_record_recv() as a fatal error and tore down the session.  On a
non-blocking socket gnutls_record_recv() can return GNUTLS_E_AGAIN or
GNUTLS_E_INTERRUPTED (both negative but non-fatal), which would drop
an otherwise healthy TLS session.  Handle them as retryable, mirroring
the existing logic in tls_write().

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Change-Id: If2f842b202dd08c07dffe3770c51cf0ce886beee
Vadim Yanitskiy at

#22171 (Jun 17, 2026, 1:51:42 PM)

client: vty: do not print NULL tls hostname

conn->tls_hostname defaults to NULL and can be cleared via "no tls
hostname".  Writing it unconditionally emitted a "tls hostname (null)"
line, producing a config that does not re-parse.  Guard it like the
other optional tls fields.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Change-Id: I5b920337409d8c9fa1edb8d47177882cf0a6c4e7
Vadim Yanitskiy at

#22170 (Jun 17, 2026, 1:51:42 PM)

client: Fix 32-bit overflow when computing pcapng EPB timestamp

tv_sec * 1000 * 1000 was evaluated in int arithmetic.  Where time_t /
tv_sec is 32-bit, this overflows for any tv_sec > ~2147, corrupting
the 64-bit timestamp_usec well before the year 2038.  Cast tv_sec to
uint64_t before the multiplication so the whole expression
is computed in 64 bits.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Change-Id: I20d3282b8cba1675ce2d0860e66027e5ee8245ef
Vadim Yanitskiy at

#22169 (Jun 17, 2026, 1:51:42 PM)

client: fix off-by-one in wrapped pcap stats counter

When a libpcap stats counter (ps_recv/ps_drop/ps_ifdrop) wraps around
UINT_MAX, get_psbl_wrapped_ctr() computed the delta as
(UINT_MAX - old_val) + new_val, omitting the single increment that
takes the counter from UINT_MAX through zero.  Add the missing +1 so
the reported delta matches the real number of increments.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Change-Id: I66581910dbd1e955831a6ff913042059ad4994a7
Vadim Yanitskiy at

#22168 (Jun 17, 2026, 1:51:42 PM)

server: fix zmq message leak on send failure

zmq_msg_send() only transfers ownership of the message to ZeroMQ on
success.  On failure the caller retains ownership, so the previously
init'd zmq_msg_t was leaked on every failed publish.  Close it
explicitly on the error path.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Change-Id: I501b1bf55bede4e69fa5d9b3f38d87341482ff49
Vadim Yanitskiy at

#22167 (Jun 17, 2026, 1:51:41 PM)

client: honor IPv4 header length in GPRS filter

The GPRS-NS/BSSGP filter assumed a fixed 20-byte IPv4 header (IP_LEN)
when locating the UDP header and payload.  When the captured packet
carries IPv4 options (ip_hl > 5), udp_data/payload_data pointed into
the middle of the headers and check_gprs() parsed garbage, classifying
packets incorrectly.

Use the actual header length from ip_hl, reject malformed headers
(ip_hl < 5), and re-validate that the larger headers fit within the
captured length before computing the payload.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Change-Id: Iac1fa9cc2a3c06cbe19c3e7799a0b335f2e3dda9
Vadim Yanitskiy at

#22166 (Jun 17, 2026, 1:51:41 PM)

server: fix NULL deref of file_hdr_msg when store is disabled

When a connection has storing disabled (no store), conn->file_hdr_msg
is never populated.  The previous link-header handling skipped the
first branch (gated on conn->store) and fell through to the comparison
branch, which dereferenced the still-NULL conn->file_hdr_msg, crashing
the server on the first PKT_LINK_HDR from such a client.

Gate the whole header tracking on conn->store and simply free the
message when not storing, since osmo_pcap_conn_restart_trace() already
no-ops in that case.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Change-Id: I419e1b66d07307c3e49294984887c153cd8494c3
Vadim Yanitskiy at

#22165 (Jun 17, 2026, 1:51:41 PM)

server: vty: validate rotate-localtime modulus against the new interval

apply_rotate_localtime() computed the maximum allowed modulus from
pcap_server->rotate_localtime.intv, the currently-stored (old) interval,
rather than the intv argument being applied.  On first configuration the
stored interval is the default 0, so the switch hit the default case and
rejected an otherwise valid command; when changing intervals the modulus
was bounds-checked against the wrong interval.  Switch on intv instead.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Change-Id: I0b367d4e255db3208b41e12adec682026b99cc18
Vadim Yanitskiy at

#22164 (Jun 17, 2026, 1:51:40 PM)

server: fix msgb leak on duplicate link header

rx_link_hdr() takes ownership of msg on success (rx_link() only frees
it on failure).  Both branches that call update_conn_file_hdr_msg()
free msg, but when an identical link header was already stored neither
branch ran and msg was leaked.

This happens on every duplicate PKT_LINK_HDR, e.g. a client that
periodically resends its header.  Free msg explicitly in that case.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Change-Id: I79344fe942342f2a736878142b3cf036fc982eef
Vadim Yanitskiy at

#22163 (Jun 17, 2026, 1:51:40 PM)

server: fix misleading data length validation log message

The format string "%u < %u <= %u" was printed with arguments
(min_len, data->len, max_len), placing the offending length in
the middle and mislabeling it.  This is confusing.  Let's print
the actual length followed by the expected interval instead.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Change-Id: Ice95c1f8ad1aa8de259364bd70eba0db8918b19e
Vadim Yanitskiy at

#22162 (Jun 17, 2026, 1:50:25 PM)

server: vty: fix docs for cfg_server_rotate_localtime[_mod_n]

Change-Id: I6fd1d081bba035fbd9d72a1705ab58194edf274e
Fixes: 18747641 ("pcap-server: Make rotate-localtime feature configurable through VTY")
Vadim Yanitskiy at

#22161 (Jun 17, 2026, 1:50:25 PM)

server: vty: fix docs for cfg_server_rotate_localtime[_mod_n]

Change-Id: I6fd1d081bba035fbd9d72a1705ab58194edf274e
Fixes: 18747641 ("pcap-server: Make rotate-localtime feature configurable through VTY")
Vadim Yanitskiy at

#22160 (Jun 17, 2026, 1:50:24 PM)

server: vty: fix docs for cfg_server_rotate_localtime[_mod_n]

Change-Id: I6fd1d081bba035fbd9d72a1705ab58194edf274e
Fixes: 18747641 ("pcap-server: Make rotate-localtime feature configurable through VTY")
Vadim Yanitskiy at

#22159 (Jun 17, 2026, 12:57:20 PM)

vty: clamp configured snaplen to the wire-framing limit

osmo-pcap carries each captured packet in a frame whose length field
(struct osmo_pcap_data.len) is a uint16_t, so any snaplen above ~64 KiB
cannot be transported and is silently clamped by the server when sizing
its receive buffer (calc_data_max_len() caps at UINT16_MAX). The VTY,
however, advertised libpcap's MAXIMUM_SNAPLEN (262144), misleading users
into configuring values that never take effect.

Introduce OSMO_PCAP_MAX_SNAPLEN (65535) and, in both the client "pcap
snaplen" and server "max-snaplen" handlers, warn and cap the value to it
when a larger one is given. The command syntax keeps the <1-262144>
range for backwards compatibility so existing configs still parse; the
help text now documents the effective 64 KiB limit.

Related: SYS#8099
Related: 6d2f7c52 ("server: Limit rx buffer size to UINT16_MAX")
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Change-Id: Ia56cad48e8cefe8ae103f2f7d2e037bf28438b71
Vadim Yanitskiy at

#22158 (Jun 17, 2026, 12:57:20 PM)

doc: clarify 'pcap snaplen' / 'max-snaplen'

Change-Id: Ic2c82173c12814d61f0ee9f7454b9e5dcb0c13f4
Related: SYS#8099
Vadim Yanitskiy at

#22157 (Jun 17, 2026, 12:57:18 PM)

vty: clamp configured snaplen to the wire-framing limit

osmo-pcap carries each captured packet in a frame whose length field
(struct osmo_pcap_data.len) is a uint16_t, so any snaplen above ~64 KiB
cannot be transported and is silently clamped by the server when sizing
its receive buffer (calc_data_max_len() caps at UINT16_MAX). The VTY,
however, advertised libpcap's MAXIMUM_SNAPLEN (262144), misleading users
into configuring values that never take effect.

Introduce OSMO_PCAP_MAX_SNAPLEN (65535) and, in both the client "pcap
snaplen" and server "max-snaplen" handlers, warn and cap the value to it
when a larger one is given. The command syntax keeps the <1-262144>
range for backwards compatibility so existing configs still parse; the
help text now documents the effective 64 KiB limit.

Related: SYS#8099
Related: 6d2f7c52 ("server: Limit rx buffer size to UINT16_MAX")
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Change-Id: Ia56cad48e8cefe8ae103f2f7d2e037bf28438b71
Vadim Yanitskiy at

#22156 (Jun 17, 2026, 12:57:18 PM)

doc: clarify 'pcap snaplen' / 'max-snaplen'

Change-Id: Ic2c82173c12814d61f0ee9f7454b9e5dcb0c13f4
Related: SYS#8099
Vadim Yanitskiy at

#22155 (Jun 17, 2026, 12:57:16 PM)

vty: clamp configured snaplen to the wire-framing limit

osmo-pcap carries each captured packet in a frame whose length field
(struct osmo_pcap_data.len) is a uint16_t, so any snaplen above ~64 KiB
cannot be transported and is silently clamped by the server when sizing
its receive buffer (calc_data_max_len() caps at UINT16_MAX). The VTY,
however, advertised libpcap's MAXIMUM_SNAPLEN (262144), misleading users
into configuring values that never take effect.

Introduce OSMO_PCAP_MAX_SNAPLEN (65535) and, in both the client "pcap
snaplen" and server "max-snaplen" handlers, warn and cap the value to it
when a larger one is given. The command syntax keeps the <1-262144>
range for backwards compatibility so existing configs still parse; the
help text now documents the effective 64 KiB limit.

Related: SYS#8099
Related: 6d2f7c52 ("server: Limit rx buffer size to UINT16_MAX")
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Change-Id: Ia56cad48e8cefe8ae103f2f7d2e037bf28438b71
Vadim Yanitskiy at

#22154 (Jun 17, 2026, 12:57:16 PM)

doc: clarify 'pcap snaplen' / 'max-snaplen'

Change-Id: Ic2c82173c12814d61f0ee9f7454b9e5dcb0c13f4
Related: SYS#8099
Vadim Yanitskiy at

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

#22152 (Jun 9, 2026, 4:18:46 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

#22151 (Jun 9, 2026, 3:33:35 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

#22150 (Jun 9, 2026, 3:33:31 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

#22149 (Jun 9, 2026, 12:10:40 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

#22148 (Jun 9, 2026, 12:10:40 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

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

#22146 (Jun 9, 2026, 9:19:36 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

#22145 (Jun 9, 2026, 8:16:55 AM)

tcap_as_loadshare: Fix newline on log message

Change-Id: Iad85ec2d4e6a64d84a865c23eb00fddcb6d767c9
dwillmann at

#22144 (Jun 9, 2026, 8:16:51 AM)

tcap_as_loadshare: Fix newline on log message

Change-Id: Iad85ec2d4e6a64d84a865c23eb00fddcb6d767c9
dwillmann at

#22143 (Jun 5, 2026, 1:36:35 PM)

tcap loadsharing: tcap_as_rx_sccp_asp: Fix memory leak

Change-Id: Id0b21bffcad43d9999f7579d92e5ef2f4a0d9f1a
lynxis at

#22142 (Jun 5, 2026, 1:36:35 PM)

tcap loadsharing: tcap_as_rx_sccp_asp: Fix memory leak

Change-Id: Id0b21bffcad43d9999f7579d92e5ef2f4a0d9f1a
lynxis at

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

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

Change-Id: Ia1ceb5f0374f47ff269b557be30fc4d59550d1a6
Andreas Eversberg at

#22140 (Jun 5, 2026, 7:44:44 AM)

Add test case to verify proper DSCP settings

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

#22139 (Jun 5, 2026, 7:44:44 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

#22138 (Jun 5, 2026, 7:44:43 AM)

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

Change-Id: Ia1ceb5f0374f47ff269b557be30fc4d59550d1a6
Andreas Eversberg at

#22137 (Jun 5, 2026, 7:44:43 AM)

Add test case to verify proper DSCP settings

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

#22136 (Jun 5, 2026, 7:44:42 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

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

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

Change-Id: Ia1ceb5f0374f47ff269b557be30fc4d59550d1a6
Andreas Eversberg at

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

Add test case to verify proper DSCP settings

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

#22133 (Jun 4, 2026, 12:16:41 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

#22132 (Jun 4, 2026, 12:16:41 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

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

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

Change-Id: Ia1ceb5f0374f47ff269b557be30fc4d59550d1a6
Andreas Eversberg at

#22130 (Jun 4, 2026, 12:16:40 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

#22129 (Jun 4, 2026, 12:16:40 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

#22128 (Jun 4, 2026, 12:16:37 PM)

Add test case to verify proper DSCP settings

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

#22127 (Jun 3, 2026, 9:32:39 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

#22126 (Jun 3, 2026, 9:32:39 AM)

Add test case to verify proper DSCP settings

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

#22125 (Jun 3, 2026, 9:32:39 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

#22124 (Jun 3, 2026, 9:32:38 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

#22123 (Jun 3, 2026, 9:32:38 AM)

Add test case to verify proper DSCP settings

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

#22122 (Jun 3, 2026, 9:32:38 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

#22121 (Jun 2, 2026, 6:59:43 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

#22120 (Jun 2, 2026, 6:59:43 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

#22119 (Jun 2, 2026, 11:58:18 AM)

Add test case to verify proper DSCP settings

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

#22118 (Jun 2, 2026, 11:58:18 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

#22117 (Jun 2, 2026, 11:58:16 AM)

Add test case to verify proper DSCP settings

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

#22116 (Jun 2, 2026, 11:58:16 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

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

Add test case to verify proper DSCP settings

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

#22114 (Jun 2, 2026, 11:15:43 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

#22113 (Jun 2, 2026, 11:15:43 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

#22112 (Jun 2, 2026, 11:15:42 AM)

Add test case to verify proper DSCP settings

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

#22111 (Jun 2, 2026, 11:15:42 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

#22110 (Jun 2, 2026, 11:15:41 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

#22109 (Jun 2, 2026, 9:54:48 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

#22108 (Jun 2, 2026, 9:54:48 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

#22107 (Jun 2, 2026, 9:54:46 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

#22106 (Jun 2, 2026, 9:54:45 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

#22105 (Jun 2, 2026, 9:54:45 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

#22104 (Jun 2, 2026, 9:54:43 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

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

#22102 (Jun 2, 2026, 7:47:15 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

#22101 (Jun 2, 2026, 7:33:37 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

#22100 (Jun 2, 2026, 7:33:35 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

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

#22098 (Jun 1, 2026, 1:41:18 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

#22097 (Jun 1, 2026, 1:41:18 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

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

Add test case to verify proper DSCP settings

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

#22095 (Jun 1, 2026, 1:29:57 PM)

Add test case to verify proper DSCP settings

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

#22094 (Jun 1, 2026, 1:11:31 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

#22093 (Jun 1, 2026, 1:11:30 PM)

Add test case to verify proper DSCP settings

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

#22092 (Jun 1, 2026, 1:11:30 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

#22091 (Jun 1, 2026, 1:11:26 PM)

Add test case to verify proper DSCP settings

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

#22090 (Jun 1, 2026, 12:46:56 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

#22089 (Jun 1, 2026, 12:46:55 PM)

Add test case to verify proper DSCP settings

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

#22088 (Jun 1, 2026, 12:46:49 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

#22087 (Jun 1, 2026, 12:46:49 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

#22086 (Jun 1, 2026, 12:46:49 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

#22085 (Jun 1, 2026, 12:46:47 PM)

Add test case to verify proper DSCP settings

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

#22084 (Jun 1, 2026, 12:06:33 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

#22083 (Jun 1, 2026, 12:06:29 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

#22082 (Jun 1, 2026, 12:06:29 PM)

Add test case to verify proper DSCP settings

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

#22081 (Jun 1, 2026, 12:06:28 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

#22080 (Jun 1, 2026, 12:06:28 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

#22079 (Jun 1, 2026, 12:06:27 PM)

Add test case to verify proper DSCP settings

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

#22076 (May 27, 2026, 7:19:18 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

#22075 (May 27, 2026, 7:19:09 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

#22074 (May 27, 2026, 7:19:08 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

#22073 (May 27, 2026, 7:19:06 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

#22072 (May 27, 2026, 7:19:05 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

#22071 (May 27, 2026, 7:19:04 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

#22070 (May 27, 2026, 7:11:56 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

#22069 (May 27, 2026, 7:11:56 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

#22068 (May 27, 2026, 7:11:55 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

#22067 (May 27, 2026, 7:11:55 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

#22066 (May 27, 2026, 7:11:55 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

#22065 (May 27, 2026, 7:11:55 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

#22064 (May 27, 2026, 7:11:54 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

#22063 (May 27, 2026, 7:11:53 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

#22062 (May 27, 2026, 6:13:39 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

#22061 (May 27, 2026, 6:13:39 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

#22060 (May 27, 2026, 12:13:55 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

#22059 (May 27, 2026, 12:13:55 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

#22058 (May 27, 2026, 12:13:54 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

#22057 (May 27, 2026, 12:13:53 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

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

#22055 (May 26, 2026, 11:44:20 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

#22054 (May 26, 2026, 11:39:35 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

#22053 (May 26, 2026, 11:39:34 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

#22052 (May 26, 2026, 11:39:32 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

#22051 (May 26, 2026, 11:39:32 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

#22050 (May 26, 2026, 11:39:30 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

#22049 (May 26, 2026, 11:39: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

#22048 (May 26, 2026, 11:39:28 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

#22047 (May 26, 2026, 11:39:27 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

#22046 (May 26, 2026, 10:12:23 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

#22045 (May 26, 2026, 10:12:19 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

#22044 (May 26, 2026, 10:12: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

#22043 (May 26, 2026, 10:12:18 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

#22042 (May 26, 2026, 10:12: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

#22041 (May 26, 2026, 10:12:17 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

#22040 (May 26, 2026, 10:02:20 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

#22039 (May 26, 2026, 10:01:41 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

#22038 (May 26, 2026, 10:01:28 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

#22037 (May 26, 2026, 10:01:24 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

#22036 (May 26, 2026, 10:01: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

#22035 (May 26, 2026, 10:01:23 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

#22034 (May 26, 2026, 10:01:23 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

#22033 (May 26, 2026, 10:01:22 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

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

Bump version: 1.1.3 → 1.2.0

Change-Id: Icee7895ada6551f4805fc3da114655360698617e
lynxis at

#22031 (May 26, 2026, 8:00:26 AM)

Bump version: 1.1.3 → 1.2.0

Change-Id: Icee7895ada6551f4805fc3da114655360698617e
lynxis at

#22030 (May 22, 2026, 1:28:59 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

#22029 (May 22, 2026, 1:28:58 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

#22028 (May 22, 2026, 1:27:53 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

#22027 (May 22, 2026, 1:27:53 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

#22026 (May 22, 2026, 1:27:52 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

#22025 (May 22, 2026, 1:27:52 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

#22024 (May 22, 2026, 1:00:06 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

#22023 (May 22, 2026, 12:59:17 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

#22022 (May 22, 2026, 12:59:17 PM)

ss7_as: fix indention

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

#22021 (May 22, 2026, 12:59:15 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

#22020 (May 22, 2026, 12:59:15 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

#22019 (May 22, 2026, 12:59:11 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

#22018 (May 22, 2026, 12:59:11 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

#22017 (May 22, 2026, 12:59:10 PM)

ss7_as: fix indention

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

#22016 (May 22, 2026, 12:59: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

#22015 (May 22, 2026, 12:59:09 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

#22014 (May 22, 2026, 12:41:05 PM)

tcap_as_loadshare: improve log lines

Change-Id: Idffe9a02127c587aca4123f12f74b657d6911a80
lynxis at

#22013 (May 22, 2026, 12:41:05 PM)

tcap_as_loadshare: improve logging of lookup failures

Change-Id: I80878dfd080c705de28175260cb392186dafed6a
lynxis at

#22012 (May 22, 2026, 12:41:02 PM)

tcap_as_loadshare: improve log lines

Change-Id: Idffe9a02127c587aca4123f12f74b657d6911a80
lynxis at

#22011 (May 22, 2026, 12:41:02 PM)

tcap_as_loadshare: improve logging of lookup failures

Change-Id: I80878dfd080c705de28175260cb392186dafed6a
lynxis at

#22010 (May 21, 2026, 10:37:55 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

#22009 (May 21, 2026, 10:37:52 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