-
released this
2026-08-25 14:22:22 +08:00 | 35 commits to main since this release✨ New features
10G / 1G management port ping test
- New
mgmt_ping_monitor.shexercises both management NICs in one loop: it brings each up with iproute2, waits for the link to settle, then pings that NIC's own target —eth0→192.168.1.30,eth1→192.168.1.31. - Runs detached like the other monitors:
start/stop/status/fg/summary.startclears the previous log, so one run means one log. - Every leg writes a single greppable line —
RESULT 10G eth0 -> 192.168.1.30 tx=10 rx=10 loss=0% rtt_avg=1.743ms nic_tx=10 nic_rx=10 PASS— so a whole soak can be read withsummaryinstead of scrolling. nic_tx/nic_rxare that interface's own counter delta across the burst. If a ping passes but they stay near zero, the traffic left on the other NIC and the number does not belong to this one.- Script A runs one round as a baseline; Script B leaves it running through the soak.
Fan speed is set at the start of every run
FAN_SPEEDinconfig.ttl(default 30) is applied by Script A, so a run no longer inherits whatever the previous test left the fans doing.- Both MAX31790 controllers are rebound first, which clears a controller left in an odd state.
Stress load moved onto the platform's own job runner
- CPU, DDR, SSD and USB stress now go through
bgctl, replacing the~/hammer/tools/stress_*.pyscripts.bgctl listshows what is running; Script C stops everything withbgctl stop --all. - BMC DDR stress runs through
bmc-manager, and a new BMC USB test discovers thecdc_ncminterface and pings across it for four hours undersystemd-run.
More of the DUT on record
- Script A now captures the boot image,
show version, firmware status, system EEPROM, SSD health, TPM version and NVMe SMART data before the test starts. - PCIe AER now sits next to
ras-mc-ctl --summary, and Script C closes with NVMe health so a disk that degraded during the soak is visible. dmesgcapture uses human-readable timestamps and one combined error pattern, then clears the ring buffer — so Script C's dmesg shows only what the soak produced, not everything since boot.- Each run opens with
hw-test-session startand closes withfinish; Script C copies the job logs to/mnt/usb/jobs-<date>_<time>so they leave the DUT with the run they belong to.
🐛 Bug fixes
Script A no longer hangs waiting for ports that are already up
- The readiness gate required more than 216 ports up, but a fully cabled unit reports exactly 216 — 108 loopback pairs times two. Script A sat in the poll loop forever on the very state it was waiting for. It now proceeds at 216.
- The comments in
wait_init.ttlstill described the old "more than" rule; they now match the code, so the off-by-one cannot be reintroduced by reading the wrong line.
The macro no longer runs ahead of the DUT during the soak
- Script B set a 15-second wait cap for the
cdc_ncmprobe and never restored it. In Tera Term that cap is global, so it stayed in force for everything after — including the traffic setup, which walks 108 VLANs per switch unit and takes far longer. A timed-out wait returns without the prompt, leaving every later command issued a step early.
Fan controller is no longer bound twice
- One of the two MAX31790 controllers received a second
bindimmediately after the first, which could only fail because the driver was already attached.
📦 Downloads
File Contents Script_ABC_Blanton_V1.0.7.zipThe full Tera Term working directory, including Blanton_Script/to copy onto the DUTAfter copying to the DUT:
chmod +x ~/Blanton_Script/*.sh # required -- see below grep -rlU $'\r' ~/Blanton_Script # expect no outputThe
chmod +xis not optional.mgmt_ping_monitor.shis executed rather than sourced and re-execs its own path to daemonise, and neither git (mode 100644) nor a Windows/USB copy carries the execute bit. Without itstartfails withPermission deniedand the latercatfinds nothing — the section ends up empty and nothing reports an error.⚠️ Before you run
- Declare the switch population.
SWB_UNIT0/SWB_UNIT1inconfig.ttlsay which switch units this DUT has. Traffic and the readiness gate both follow them: a single unit gets-u 0or-u 1, and with neither set the traffic stage is skipped instead of failing against hardware that is not there. - Both management NICs stay up. If they share a subnet, keep
ARP_STRICT=1— otherwise the target's ARP can be answered by either NIC and a reply may arrive on the one that did not send. - Management connectivity is exercised, not preserved. Drive the run from the serial console.
- Two settings persist to
config_db.jsonand survive a reboot: LLDP is left disabled, and the 100G uplinks are left configured. Restore them before the DUT moves on.
🔗 Links
- ARCHITECTURE.md — test flow, data models, constraints
- CLAUDE.md — commands and the bench gotchas
Full changelog: V1.0.5...V1.0.7
Downloads
- New