Commit Graph
37014 Commits
Author SHA1 Message Date
Florian Eckert 8fd900f4e1 libnetfilter-cthelper: replace deprecated GPL-2.0+ with GPL-2.0-or-later
The license 'GPL-2.0+' is marked deprecated. Use instead
'GPL-2.0-or-later' identifier.

https://spdx.org/licenses/GPL-2.0+.html

Signed-off-by: Florian Eckert <fe@dev.tdt.de>
2026-07-23 07:28:58 +02:00
Florian Eckert 008c78ee68 libnetfilter-cttimeout: replace deprecated GPL-2.0+ with GPL-2.0-or-later
The license 'GPL-2.0+' is marked deprecated. Use instead
'GPL-2.0-or-later' identifier.

https://spdx.org/licenses/GPL-2.0+.html

Signed-off-by: Florian Eckert <fe@dev.tdt.de>
2026-07-23 07:28:58 +02:00
Florian Eckert 8ae0f28fe3 libnetfilter-log: replace deprecated GPL-2.0+ with GPL-2.0-or-later
The license 'GPL-2.0+' is marked deprecated. Use instead
'GPL-2.0-or-later' identifier.

https://spdx.org/licenses/GPL-2.0+.html

Signed-off-by: Florian Eckert <fe@dev.tdt.de>
2026-07-23 07:28:58 +02:00
Florian Eckert 8d0187d3a3 rpcd-mod-wireguard: replace deprecated LGPL-2.1+ with LGPL-2.1-or-later
The license 'LGPL-2.1+' is marked deprecated. Use instead
'LGPL-2.1-or-later' identifier.

 https://spdx.org/licenses/LGPL-2.1+.html

Signed-off-by: Florian Eckert <fe@dev.tdt.de>
2026-07-23 07:28:58 +02:00
Florian Eckert 21234c4da7 xz: use correct SPDX license name
The value 'Public-Domain' is not a correct SPDX identifier so remove
them. In addition, the SPDX license GPL-2.0 is still missing, which is
hereby corrected.

Signed-off-by: Florian Eckert <fe@dev.tdt.de>
2026-07-23 07:28:58 +02:00
Alexandru Ardelean 71223e9e07 freeradius3: update to 3.2.10
Patches:
- Drop 003-freeradius-fix-error-for-expansion-of-macro.patch (upstream
  restructured src/include/threads.h) and add
  003-configure-assume-cross-tls.patch instead: the AC_RUN_IFELSE
  __thread probe cannot run when cross-compiling, so TLS_STORAGE_CLASS
  stays undefined and threads.h hits '#error unsupported' (since 3.2.9).
- Drop 002-disable-session-cache-CVE-2017-9148.patch, 3.2.x is not
  affected per https://nvd.nist.gov/vuln/detail/CVE-2017-9148.
- Replace 004-get-hostname-from-proc-in-radtest.patch with
  004-radtest-nas-name-from-hostname-env.patch: prefer $HOSTNAME and keep
  the upstream `hostname || uname -n` fallback instead of reading
  /proc/sys/kernel/hostname unconditionally.
- Re-do 020-fix-freeradius3-krb5.patch, also sent upstream for review.
- Give the touched patches the git format-patch headers 'git am' needs,
  with the diff bodies unchanged so they still match 'quilt refresh'.

Depend on libopenssl-legacy when built against OpenSSL: with OpenSSL 3.x
tls_global_init() unconditionally does OSSL_PROVIDER_load(NULL, "legacy")
for MD4/MS-CHAP and errors out when it is missing, so radiusd exits during
startup before it ever serves a request.

Add a test.sh covering the freeradius3, -common, -utils and -democerts
packages: radiusd -XC starts the server for real, the config tree it reads
is checked, the dictionaries the master dictionary still $INCLUDEs must
all be packaged, and the demo certificates must be real PEM.

Signed-off-by: Alexandru Ardelean <alex@shruggie.ro>
2026-07-23 01:10:15 +02:00
Ray Wang f33158e88d hev-socks5-tunnel: update to 2.16.0
Upstream changelog:
https://github.com/heiher/hev-socks5-tunnel/releases/tag/2.16.0

Signed-off-by: Ray Wang <git@hev.cc>
2026-07-23 01:05:46 +02:00
Daniel F. Dickinson 3e46007e60 zabbix: add php8-mod-simplexml dependency to frontend
While the frontend can mostly operate without php8-mod-simplexml, when
trying to import XML templates the user only gets unhelpful error
messages and is unlikely to realize the module is required for that
functionality. Therefore have the frontend depend on php8-mod-simplexml.

Signed-off-by: Daniel F. Dickinson <dfdpublic@wildtechgarden.ca>
2026-07-23 01:04:06 +02:00
Daniel F. Dickinson f1bf9f56d8 zabbix: stop shipping sysctl.d conf in package
The sysctl file increases max files to allow the default full
complement of discovery workers, however this is probably not a
hard requirement and such a conf not shipped elsewhere in tree, so
leave that to the user to configure. (The syslog messages from
zabbix-server and/or zabbix-proxy provided the needed information).

Signed-off-by: Daniel F. Dickinson <dfdpublic@wildtechgarden.ca>
2026-07-23 01:04:06 +02:00
Daniel F. Dickinson 2616169cd4 zabbix: reorganize files dir for clarity and to better follow the FHS
Reorganize the extra files under the 'files' dir so that it is more
clear where they go and what they are for, and to avoid having a
disorganized mass of files.

Move the extra C source file out of files and into 'src-extra'.

Avoid treating openwrt-supplied params files as configuration data.
Instead have them in a separate directory under /usr/share which is
included in the zabbix_agentd configuration by default. This also better
follows the FHS.

Hopefully these changes make sense on their own, as well as helping the
CI accept the changes.

Signed-off-by: Daniel F. Dickinson <dfdpublic@wildtechgarden.ca>
2026-07-23 01:04:06 +02:00
Daniel F. Dickinson 9058162e11 zabbix: preserve user config files across sysupgrade
Add the user config file directories (/etc/zabbix_x.conf.d) to the
list of directories and files to preserve across sysupgrade.

Signed-off-by: Daniel F. Dickinson <dfdpublic@wildtechgarden.ca>
2026-07-23 01:04:06 +02:00
Mirko Vogt 084f89271e snapcast: add libsoxr dependency to snapclient
SNAPCAST_SOXR passes -DBUILD_WITH_SOXR, which is a build-wide CMake
option: snapserver and snapclient are built from one source tree and
both link libsoxr. The dependency was declared only on snapserver, so
with SNAPCAST_SOXR enabled (the default) the snapclient package failed
at the packaging step:

  Package snapclient is missing dependencies for the following libraries:
  libsoxr.so.0

Declare +SNAPCAST_SOXR:libsoxr on snapclient too, and relabel the option
"(server + client)" so its build-wide scope is clear.

Fixes: 7673cd9a ("snapcast: make build options explicit and per-package deps precise")
Signed-off-by: Mirko Vogt <mirko-openwrt@nanl.de>
2026-07-22 16:14:58 +02:00
Jan Hák 59bccbd178 knot: update to version 3.5.6
Release notes: https://www.knot-dns.cz/2026-07-20-version-356.html

Signed-off-by: Jan Hák <jan.hak@nic.cz>
2026-07-22 14:41:45 +02:00
Jan Klos 6aa842a0fe ldns: update to 1.9.2
https://github.com/NLnetLabs/ldns/blob/1.9.2/Changelog

Signed-off-by: Jan Klos <jan@klos.xyz>
2026-07-22 11:08:53 +03:00
Alexandru Ardelean 87a7be0326 vobject: add missing pytz and six dependencies
vobject 0.9.9 lists both pytz and six as unconditional runtime requirements
in install_requires, but neither was in DEPENDS. Running the change_tz
console script failed with "ModuleNotFoundError: No module named 'pytz'".

six happened to resolve transitively through python3-dateutil even though
vobject/base.py imports it directly, so list it explicitly rather than rely
on another package's dependency.

Extend test.sh to check that both modules import and that vobject.change_tz
loads.

Fixes: https://github.com/openwrt/packages/issues/29992
Signed-off-by: Alexandru Ardelean <alex@shruggie.ro>
2026-07-22 09:31:42 +03:00
Tianling Shen c7e6d5ce42 cloudreve: update to 4.18.0
Changelog:
- https://github.com/cloudreve/cloudreve/releases/tag/4.17.0
- https://github.com/cloudreve/cloudreve/releases/tag/4.18.0

Signed-off-by: Tianling Shen <cnsztl@immortalwrt.org>
2026-07-22 12:03:08 +08:00
Dengfeng Liu 6007f8eeed apfree-wifidog: update to 9.07.2907
Updated from 9.05.2872 to 9.07.2907.

Changes:
- Portal cache lazy loading for faster portal page delivery
- MAC blacklist (untrust_macs) nftables support and wdctlx CLI
- MQTT API handlers for untrusted MAC management
- QoS request rate limits in BPF handler
- Fix null pointer crash and connection memory leak
- Fix URL encoding for SSID in redirect URLs
- Fix auth server redirect loop detection
- Fix BPF MAC address display and traversal issues
- Fix firewall dual-stack independent evaluation
- Fix WiFi SSID retrieval from bridge FDB

Signed-off-by: Dengfeng Liu <liudf0716@gmail.com>
2026-07-21 18:05:04 +03:00
Daniel F. Dickinson ddd6bb919a radicale3: bump version to v3.7.7
This is a bug fix release: https://github.com/Kozea/Radicale/releases/tag/v3.7.7

Signed-off-by: Daniel F. Dickinson <dfdpublic@wildtechgarden.ca>
2026-07-21 09:24:54 +02:00
Hauke Mehrtens 50dec501ab cgi-io: update to Git HEAD (2026-07-21)
31cb3c89f02d main, util: fix use-after-free on malformed POST field decoding

Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
2026-07-21 05:58:53 +02:00
Niklas Thorild 5dcb4b888f telegraf: update to 1.39.2
Release notes: https://github.com/influxdata/telegraf/releases/tag/v1.39.2

Signed-off-by: Niklas Thorild <niklas@thorild.se>
2026-07-21 05:58:05 +02:00
Mirko Vogt 7673cd9a3e snapcast: make build options explicit and per-package deps precise
Pin every CMake BUILD_WITH_* switch and expose the optional features as
config symbols, so builds are reproducible and snapserver/snapclient
each depend only on the libraries their binary actually links (boost is
header-only and becomes a build-only dependency).

Add a patch introducing a BUILD_WITH_SOXR option: upstream looks SOXR up
with an unconditional pkg_search_module(), so resampling gets enabled
purely by whether libsoxr happens to be discoverable in the shared
staging dir - non-deterministic in a package feed. The option makes it
an explicit, REQUIRED choice (enabled-but-missing fails at configure
time instead of silently dropping the feature).

Assisted-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Signed-off-by: Mirko Vogt <mirko-openwrt@nanl.de>
2026-07-20 19:02:02 +02:00
Sebastian Hamann b442c043a7 fluent-bit: add init script
A init script allows running fluent-bit as a system service.

Signed-off-by: Sebastian Hamann <code@ares-macrotechnology.com>
2026-07-20 12:10:04 +03:00
Facundo Acevedo 0d0e892a6a procs: bump to 0.14.12
Updated procs package to 0.14.12
Updated procs.toml (config file) to match  default config file from upstream

Signed-off-by: Facundo Acevedo <facevedo@disroot.org>
2026-07-20 08:17:44 +02:00
Dharmik Parmar 2e945de232 trafficshaper: add nftables firewall backend
Add an nftables firewall backend while keeping the existing iptables backend available.

Use nftables on fw4 systems and fall back to iptables otherwise.

Signed-off-by: Dharmik Parmar <dharmikparmar2004@yahoo.com>
2026-07-19 20:08:34 +02:00
Daniel F. Dickinson a9f0e9fae4 nut: use common log functions instead of direct logger calls
Where possible prefer the log wrappers to direct logger calls.

Signed-off-by: Daniel F. Dickinson <dfdpublic@wildtechgarden.ca>
2026-07-19 11:23:51 +02:00
Daniel F. Dickinson 7a76011672 nut: add process id to log messages
Show the PID beside the syslog_id to aid debugging.

Signed-off-by: Daniel F. Dickinson <dfdpublic@wildtechgarden.ca>
2026-07-19 11:23:51 +02:00
Daniel F. Dickinson 95e3d348f8 nut: manage logging
NUT (upstream) logging has changed. With the introduction of
NUT_DEBUG_SYSLOG we can set it to "stderr" and have NUT's messages
go to stderr only.

This avoid most duplicate messages when procd sends stderr to syslog.

The reverse (syslog only from NUT) is not a current configuration
option. See the section for NUT_DEBUG_SYSLOG at
https://networkupstools.org/docs/man/nut.conf.html#_directives

This is needed because we use '-FF' so that the daemons remain in the
foreground, which is required for procd to manage them. When using
'-FF' logging behaves differently in NUT than when backgrounded.

Unfortunately, there is still some work to be done upstream to
completely eliminate duplicate messages, so some message continue to
appear twice, though not neccessarily with the same facility.priority.

See also
https://github.com/jimklimov/nut/blob/0c3eed09b89cce1e5c0c65ca03d05b4612371cb8/UPGRADING.adoc#changes-from-282-to-283
and
https://github.com/openwrt/packages/pull/29896#issuecomment-5012737643

Conversely, the log messages the initscripts emit are now configured to
emit only to syslog and not to stderr. This avoids duplicates messages
caused by procd's automatic (not configurable) behaviour of sending
the initscript's stderr to syslog, while preserving the syslogid,
facility and priority we want.

Signed-off-by: Daniel F. Dickinson <dfdpublic@wildtechgarden.ca>
2026-07-19 11:23:51 +02:00
Stan Grishin b9f1de40dc adblock-fast: update to 1.2.4-4
Maintainer: me
Compile tested: x86_64, Dell EMC Edge620, OpenWrt 25.12.4
Run tested: x86_64, Dell EMC Edge620, OpenWrt 25.12.4

Description:
Update to PKG_RELEASE 4

  - Bump PKG_RELEASE from 2 to 4.
  - Add PKG_CPE_ID.

files/lib/adblock-fast/adblock-fast.uc:
  - Adjust logic for determining the gzip cache path to align with
    the new 'compressed_cache' option.
  - Remove dependency on 'compressed_cache_dir' for gzip path
    construction.
  - Update gzip path calculation in 'get_init_status' to use the new
    'compressed_cache' option.

Signed-off-by: Stan Grishin <stangri@melmac.ca>
2026-07-18 17:26:43 -07:00
Stan Grishin f38b17190a https-dns-proxy: update to 2026.05.06-1
Maintainer: me
Compile tested: x86_64, Dell EMC Edge620, OpenWrt 25.12.4
Run tested: x86_64, Dell EMC Edge620, OpenWrt 25.12.4

Description:
Update to 2026.05.06 and add IP family option

  - Update PKG_VERSION to 2026.05.06
  - Update PKG_RELEASE to 1
  - Add PKG_CPE_ID for CVE tracking
  - Update PKG_MIRROR_HASH and PKG_SOURCE_VERSION

files/etc/config/https-dns-proxy:
  - Add comments for default options
  - Add new 'force_ip_family' option to control IP family for resolvers
  - Update default 'bootstrap_dns' to include IPv6 addresses

files/etc/init.d/https-dns-proxy:
  - Add DEFAULT_BOOTSTRAP4 and DEFAULT_BOOTSTRAP6 for family fallbacks
  - Change 'global_force_ipv6' to 'global_force_ip_family' for new option
  - Modify append_boot to filter bootstrap DNS by 'force_ip_family'
  - Implement fallback bootstrap DNS for forced IP families with no
    compatible configured servers
  - Change 'start_instance' to use 'force_ip_family' instead of
    'force_ipv6'
  - Ensure 'service_started' and 'service_stopped' always return 0 to
    prevent incorrect failure reports for `start`/`reload`/`restart`
    commands

files/etc/uci-defaults/50-https-dns-proxy-migrate-options.sh:
  - Migrate 'force_ipv6_resolvers' option to 'force_ip_family' option
  - Remove old 'force_ipv6_resolvers' option after migration

Signed-off-by: Stan Grishin <stangri@melmac.ca>
2026-07-18 17:26:36 -07:00
Stan Grishin fbd708f050 pbr: update to 1.2.2-20
Maintainer: me
Compile tested: x86_64, Dell EMC Edge620, OpenWrt 25.12.4
Run tested: x86_64, Dell EMC Edge620, OpenWrt 25.12.4

Description:
Update to version 1.2.2-20

  - Bump PKG_RELEASE to 20.
  - Add Erik Conijn as a co-maintainer.

files/etc/init.d/pbr:
  - Update packageCompat to 27.
  - Standardize gateway warning messages.
  - Add ubus_get_data helper for improved error/warning handling.
  - Preserve JSON namespace in json() for better error handling.
  - Refine device retrieval logic for OpenVPN interfaces.
  - Improve display of IPv4/IPv6 gateways for consistency.
  - Adjust service start trigger to only block on errors, not warnings.
  - Ensure 'error' field is populated in ubus status when no gateways
    are available.

files/etc/uci-defaults/90-pbr:
  - Remove sed rule for '/etc/pbr/' to '/usr/share/pbr/' path
    update.

Signed-off-by: Stan Grishin <stangri@melmac.ca>
2026-07-18 17:26:28 -07:00
Alexandru Ardelean 9f76dfc43c openssh: add test-version.sh CI override
OpenSSH reports "10.4p1" but PKG_VERSION is "10.4_p1", so the forced generic
probe never matches and fails. Verify via ssh/sshd where the subpackage ships
one and accept the subpackages that carry no version-reporting binary.

Signed-off-by: Alexandru Ardelean <alex@shruggie.ro>
2026-07-18 22:49:20 +03:00
Alexandru Ardelean 084acd635c libpam: add test-version.sh CI override
libpam's helper binaries have no version flag, so the forced generic probe
fails with "No executables provided version". Accept the version here; the
library version is already covered by the SONAME checks.

Signed-off-by: Alexandru Ardelean <alex@shruggie.ro>
2026-07-18 22:49:20 +03:00
Alexandru Ardelean 74f3af5169 ripe-atlas: add test.sh
Cover ripe-atlas-common, -probe and -anchor: the busybox measurement
applets resolve and run without crashing, the shell libraries parse, the
capabilities grant CAP_NET_RAW, uci parses the config, and each variant
ships its registration servers and host keys.

test-version.sh overrides the generic per-executable version probe, which
would otherwise run the /usr/sbin/ripe-atlas wrapper -- it has no version
flag and boots the probe instead.

Signed-off-by: Alexandru Ardelean <alex@shruggie.ro>
2026-07-18 22:49:20 +03:00
Tiago Gaspar b77264c922 ripe-atlas: add new package
Replace atlas-probe and atlas-sw-probe with ripe-atlas, built from the
upstream ripe-atlas-software-probe release tarball (tag 5110) so future
bumps only touch PKG_VERSION and PKG_HASH. Provide atlas-probe and
atlas-sw-probe so existing installs and sysupgrade keep resolving across
the rename.

Run the probe as the ripe-atlas user instead of root, with ujail granting
the measurement applets CAP_NET_RAW from capabilities.json. Drop the unused
e2fsprogs dependency; keep OPENSSL_WITH_DEPRECATED, which upstream tcputil.c
still needs.

Signed-off-by: Tiago Gaspar <tiagogaspar8@gmail.com>
2026-07-18 22:49:20 +03:00
Tiago Gaspar 6129fcd17d atlas-sw-probe: remove package
Delete the atlas-sw-probe package in favor of the new ripe-atlas package
that will be added in a following commit.

Signed-off-by: Tiago Gaspar <tiagogaspar8@gmail.com>
2026-07-18 22:49:20 +03:00
Tiago Gaspar d2aeaf041b atlas-probe: remove package
Delete the atlas-probe package in favor of the new ripe-atlas package
that will be added in a following commit.

Signed-off-by: Tiago Gaspar <tiagogaspar8@gmail.com>
2026-07-18 22:49:20 +03:00
Alexandru Ardelean 16b3c7b2dc wget: rank wget-nossl below uclient-fetch for the wget alternative
apk uses whatever /usr/bin/wget resolves to for HTTPS index downloads.
wget-nossl's alternative was ranked 300, above the HTTPS-capable
uclient-fetch (200), so pulling it in transitively silently broke
apk update. Lower it to 100 so uclient-fetch keeps the default while
wget-nossl stays selectable. wget-ssl (400) is unchanged.

Fixes: https://github.com/openwrt/openwrt/issues/24270
Signed-off-by: Alexandru Ardelean <alex@shruggie.ro>
2026-07-18 22:40:00 +03:00
Alexandru Ardelean 4417cbdb1b rsyslog: update to 8.2606.0
Drop 001-configure-make-libyaml-default-on-explicit.patch; it was a backport
of upstream commit c5c24486 which is now part of this release, so configure.ac
already makes libyaml default-on and fails fast when yaml-0.1 is missing.

Signed-off-by: Alexandru Ardelean <alex@shruggie.ro>
2026-07-18 20:47:01 +03:00
Richard Schneidt 0f55606b7f privoxy: fix bug when using luci to save config
Fix regression when saving config via luci, use correct syntax for uci vars.

Signed-off-by: Richard Schneidt <ricsc@t-online.de>
2026-07-18 19:20:40 +03:00
Daniel F. Dickinson 69b555d22a zabbix: bump version to 7.0.28
Update to latest LTS. See release notes:
https://www.zabbix.com/rn/rn7.0.28

Signed-off-by: Daniel F. Dickinson <dfdpublic@wildtechgarden.ca>
2026-07-18 10:59:18 +02:00
Ismail Kundakci 6b2c2a7ab4 docker: update to 29.6.1
https://docs.docker.com/engine/release-notes/29/#2961

Also fix SPACE:= formatting.
Signed-off-by: Ismail Kundakci <ism.kundakci@hotmail.com>
2026-07-18 11:46:26 +03:00
Ismail Kundakci ac16033396 dockerd: update to 29.6.1
https://docs.docker.com/engine/release-notes/29/#2961

Also fix SPACE:= formatting.
Signed-off-by: Ismail Kundakci <ism.kundakci@hotmail.com>
2026-07-18 11:46:26 +03:00
Ismail Kundakci 5a7ffd5ff4 containerd: update to 2.2.5
https://github.com/containerd/containerd/releases/tag/v2.2.5
Signed-off-by: Ismail Kundakci <ism.kundakci@hotmail.com>
2026-07-18 11:46:26 +03:00
Ismail Kundakci 7f7ba1d1fb runc: update to 1.3.6
https://github.com/opencontainers/runc/releases/tag/v1.3.6
Signed-off-by: Ismail Kundakci <ism.kundakci@hotmail.com>
2026-07-18 11:46:26 +03:00
Wei-Ting Yang c3636fb7df sqlite3: bump to 3.53.3
This version bump includes fixes for the following CVEs:
- CVE-2026-11822
- CVE-2026-11824

Full release notes:
https://www.sqlite.org/releaselog/3_53_3.html

Signed-off-by: Wei-Ting Yang <williamatcg@gmail.com>
2026-07-18 11:43:20 +03:00
David Connolly cf0fda7beb udpspeeder: pass the timeout option to the binary
The timeout UCI option is validated and documented but never appended to
the command, so setting it had no effect. Pass it through with the schema
default of 8, which matches the binary's own default.

Fixes: https://github.com/openwrt/packages/issues/18955

Signed-off-by: David Connolly <david@connol.ly>
2026-07-18 08:11:19 +02:00
David Connolly 5b90fb99a0 udpspeeder: build with the toolchain CXX and flags
Patch the upstream makefile to build the cross target with $(CXX) and the
toolchain $(CXXFLAGS)/$(LDFLAGS), and take the version from an overridable
variable. This replaces the Build/Prepare sed rewrites, and the binary now
picks up the hardening flags.

Honouring CXXFLAGS turns on -mips16 for the mips_24kc targets, where the
C++ atomics compile to a sync instruction MIPS16 cannot encode, so build
them with no-mips16.

Signed-off-by: David Connolly <david@connol.ly>
2026-07-18 08:11:19 +02:00
Qingfang Deng 35d5fe4a05 ovpn-dco: update to version 7.1.0.2026070800
Update to the latest version.

Upstreamed patch: 0002-undef-kmalloc_obj.patch

Signed-off-by: Qingfang Deng <dqfext@gmail.com>
2026-07-17 08:08:26 +02:00
Florian Eckert 4abc285025 strongswan: bump PKG_RELEASE
Update PKG_RELEASE to '4'.

Signed-off-by: Florian Eckert <fe@dev.tdt.de>
2026-07-16 14:27:36 -06:00
Florian Eckert a30421aad1 strongswan: move strongswan syslog generation into subfunction
This makes the generation process clearer and more extensible.

This commit does not change the function and is a preparatory commit.

Signed-off-by: Florian Eckert <fe@dev.tdt.de>
2026-07-16 14:27:36 -06:00