#!/bin/sh
# DF-3178 wiring-variant run — mount the census-lie image (su_btotal =
# 0x0FFFC000, dbnum = 0x3FFF) as root and measure:
#   * kernel heap wired by the mount (vmstat -m, M_HPFSMNT rows)
#   * free-page delta (vm.stats.vm.v_free_count)
#   * the statfs lie (df: ~128 GiB total on a 1.25 MiB image)
#   * mount wall-time, then unmount + verify everything is released
# A second mount/unmount cycle proves repeatability.
set -
cd "$(dirname "$0")"
CFG=../../../dfbsd-qemu/config
SSH="ssh -F $CFG -o ConnectTimeout=8 -o BatchMode=yes"
SCP="scp -F $CFG -o ConnectTimeout=8 -o BatchMode=yes"

python3 craft_img.py df3178w.img wiring
$SCP df3178w.img dfbsd:/tmp/df3178.img
$SCP mount_ro.c dfbsd:/tmp/
$SSH dfbsd 'sh -c "[ -x /root/mount_ro ] || cc -O2 -I/usr/src/sys -o /root/mount_ro /tmp/mount_ro.c"'

cat > /tmp/df3178_go.sh <<'GOEOF'
#!/bin/sh
echo "== pre-mount state =="
vmstat -m | grep -i hpfs || echo "(no HPFS malloc rows yet)"
sysctl vm.stats.vm.v_free_count
echo
echo "== mount (root, RO) =="
mkdir -p /tmp/hpfsmp
vnconfig -u vn0 2>/dev/null
vnconfig vn0 /tmp/df3178.img || exit 1
START=$(date +%s)
/root/mount_ro /dev/vn0 /tmp/hpfsmp || { echo MOUNT_FAILED; exit 1; }
END=$(date +%s)
echo "MOUNT_RC=0 wall=$((END-START))s"
echo
echo "== post-mount state =="
vmstat -m | grep -i hpfs
sysctl vm.stats.vm.v_free_count
echo
echo "== the statfs lie =="
df /tmp/hpfsmp
df -k /tmp/hpfsmp
echo
echo "== image is really only =="
ls -l /tmp/df3178.img
diskinfo -v /dev/vn0 2>/dev/null | head -8 || true
echo
echo "== unmount + verify release =="
sync
umount /tmp/hpfsmp && echo UMOUNT_OK
sleep 1
vmstat -m | grep -i hpfs || echo "(HPFS malloc rows gone)"
sysctl vm.stats.vm.v_free_count
vnconfig -u vn0 && echo VN_RELEASED
GOEOF

$SCP /tmp/df3178_go.sh dfbsd:/tmp/
$SSH dfbsd "sh /tmp/df3178_go.sh"
echo "RUN1_EXIT=$?"

echo "=== second cycle (repeatability) ==="
$SSH dfbsd 'sh -c "vnconfig vn0 /tmp/df3178.img && /root/mount_ro /dev/vn0 /tmp/hpfsmp && vmstat -m | grep -i hpfs && df -k /tmp/hpfsmp && umount /tmp/hpfsmp && vnconfig -u vn0 && echo CYCLE2_OK"'
echo "RUN2_EXIT=$?"
