<feed xmlns='http://www.w3.org/2005/Atom'>
<title>packages/utils/librespeed-common, branch master</title>
<subtitle>Mirror of packages feed</subtitle>
<id>https://git.openwrt.org/feed/packages/atom?h=master</id>
<link rel='self' href='https://git.openwrt.org/feed/packages/atom?h=master'/>
<link rel='alternate' type='text/html' href='https://git.openwrt.org/feed/packages/'/>
<updated>2026-10-28T09:13:45Z</updated>
<entry>
<title>librespeed-common: refuse a zero step and a trailing comma</title>
<updated>2026-10-28T09:13:45Z</updated>
<author>
<name>Josef Schlehofer</name>
</author>
<published>2026-10-11T22:05:01Z</published>
<link rel='alternate' type='text/html' href='https://git.openwrt.org/feed/packages/commit/?id=325ff7dde30a3235d693013a32fe524b51585bf2'/>
<id>urn:sha1:325ff7dde30a3235d693013a32fe524b51585bf2</id>
<content type='text'>
A hand-set '00m' or '00h' passed the zero check, which compared strings,
and cron reads a zero step as its first value only, so the test ran
every hour or once a day while LuCI listed no upcoming run. A day list
ending in a comma, such as '1,2,', reached the crontab, where crond logs
a parse error at every load, and a weekly test could land on Sunday.

An interval with a leading zero now gets no cron line, and such a day
list counts as unset, as other invalid values do. LuCI already refuses
such an interval and never writes such a list. test.sh adds invalid
and injected values of every option.

Signed-off-by: Josef Schlehofer &lt;pepe.schlehofer@gmail.com&gt;
</content>
</entry>
<entry>
<title>librespeed-common: add a weekly schedule interval</title>
<updated>2026-10-28T09:13:45Z</updated>
<author>
<name>Josef Schlehofer</name>
</author>
<published>2026-09-28T07:15:13Z</published>
<link rel='alternate' type='text/html' href='https://git.openwrt.org/feed/packages/commit/?id=d20873c8d61e7da02dca943bf5a68614f643b929'/>
<id>urn:sha1:d20873c8d61e7da02dca943bf5a68614f643b929</id>
<content type='text'>
Daily was the longest interval. A backup link that sits idle most of
the time needs a measurement less often, and each one saturates the
link while it runs.

'7d' runs a test once a week, at a time drawn in the hours window as a
daily test is, on a day drawn from 'days' (any day when none is set).
The drawn slot is kept across reloads while it still fits, so a week
neither loses its test nor gets two. '24h', which the sub-daily branch
always took first, leaves that pattern.

Signed-off-by: Josef Schlehofer &lt;pepe.schlehofer@gmail.com&gt;
</content>
</entry>
<entry>
<title>librespeed-common: measure and schedule per interface</title>
<updated>2026-10-28T09:13:45Z</updated>
<author>
<name>Josef Schlehofer</name>
</author>
<published>2026-09-24T06:24:24Z</published>
<link rel='alternate' type='text/html' href='https://git.openwrt.org/feed/packages/commit/?id=da7767e56ffcce933f1e182336ac6dcb408d3b22'/>
<id>urn:sha1:da7767e56ffcce933f1e182336ac6dcb408d3b22</id>
<content type='text'>
Every result named main.interface, even when the test had gone out
another link, so a backup uplink such as LTE could not be measured on
its own, and a day's aggregate mixed all links.

librespeed-run and ubus start take an optional interface. IPv4 and IPv6
on one device (wan and wan6) count as one link. Each test is bound to
the device of its link, and its result names that link. A link with
none of its interfaces up is not measured; its failure is shown. The
same holds for an interface netifd does not know, such as a disabled
one, and for any while netifd does not answer; ubus start refuses these
at once. 'librespeed-run --links' and ubus links print the link each
interface is recorded under and the links to offer, leaving out a
static interface without a gateway such as lan, so a frontend need not
repeat the rule. A failure is reported per interface until a result is
recorded on its link, or until no configuration names that interface
any more. The init script writes one cron line per interface,
aggregates are kept per day and interface, and a run that finds another
in progress waits up to 3 minutes, as several schedules fire at the
same minute, then gives up and records that as the interface's failure.

Existing configs, cron lines and history keep working, except that a
default interface whose link is down, or that netifd does not know, is
no longer measured.

Signed-off-by: Josef Schlehofer &lt;pepe.schlehofer@gmail.com&gt;
</content>
</entry>
<entry>
<title>librespeed-common: free the lock as soon as a run ends</title>
<updated>2026-10-28T09:13:45Z</updated>
<author>
<name>Josef Schlehofer</name>
</author>
<published>2026-10-11T05:54:03Z</published>
<link rel='alternate' type='text/html' href='https://git.openwrt.org/feed/packages/commit/?id=1cc1d0ccc41233e143519a13006adb93ab90cd2f'/>
<id>urn:sha1:1cc1d0ccc41233e143519a13006adb93ab90cd2f</id>
<content type='text'>
The traffic sampler of a bound run inherited the lock's descriptor, so
its last 'sleep 1' held the lock up to a second after the run ended,
and a test started right then was refused as already running.

Signed-off-by: Josef Schlehofer &lt;pepe.schlehofer@gmail.com&gt;
</content>
</entry>
<entry>
<title>librespeed: fix the kconfig recursion between common and the clients</title>
<updated>2026-09-24T06:34:20Z</updated>
<author>
<name>Josef Schlehofer</name>
</author>
<published>2026-09-21T17:40:14Z</published>
<link rel='alternate' type='text/html' href='https://git.openwrt.org/feed/packages/commit/?id=4206464bc04ef3dde58218e515e86ab93ea2850c'/>
<id>urn:sha1:4206464bc04ef3dde58218e515e86ab93ea2850c</id>
<content type='text'>
Two packages provide librespeed-cli, and for a dependency written with a
leading plus, package-metadata.pl re-emits the chosen provider's
architecture gate under a condition that names the consuming package.
Kconfig reads that as a self-dependency, once for librespeed-common and
again for luci-app-librespeed. Naming the client without the plus emits
a plain either-or instead, and the user picks.

The provide also crosses package boundaries, where package-pack.mk asks
for an unversioned one: with a version the higher one wins, so a release
on either side would decide which client apk installs. Unversioned, the
package called librespeed-cli keeps the name, and a default variant
gives the Rust client the provider priority so it is still chosen where
the Go client is not built.

Signed-off-by: Josef Schlehofer &lt;pepe.schlehofer@gmail.com&gt;
</content>
</entry>
<entry>
<title>librespeed-common: add measurement backend</title>
<updated>2026-09-03T12:53:08Z</updated>
<author>
<name>Josef Schlehofer</name>
</author>
<published>2026-08-16T10:40:23Z</published>
<link rel='alternate' type='text/html' href='https://git.openwrt.org/feed/packages/commit/?id=08da28b3e81185053263ee262326c66b88760c0f'/>
<id>urn:sha1:08da28b3e81185053263ee262326c66b88760c0f</id>
<content type='text'>
Add a common backend for running librespeed-cli measurements on a router.

The package provides a locked measurement runner, live progress state, and
an rpcd ucode plugin exposing start/stop/status/result/history/config over
ubus. Scheduled measurements are managed through cron and can run within a
configurable time window. Optional daily aggregation keeps longer-term
history compact.

Raw measurements are kept in JSONL for a configurable retention period.
When persistent archive storage is configured, completed days are reduced
to daily min/avg/max values.

Signed-off-by: Josef Schlehofer &lt;pepe.schlehofer@gmail.com&gt;
</content>
</entry>
</feed>
