#!/bin/sh
# DF-5396 rig (v2): boot the DF guest CLEAN (uhci controller + reconnecting
# chardev, NO usb-redir device yet). After ssh is up:
#   1. guest: kldload if_urndis
#   2. host:  start usbredir_rndis.py (chardev reconnects while RUNNING ->
#             hello flows -> device_connect)
#   3. monitor: device_add usb-redir -> urndis0 attaches
# Steps 1-3 are done by attach_dev.sh.
set -e
cd "$(dirname "$0")/../../../dfbsd-qemu"

# no server during boot (avoid QEMU's prelaunch write suppression deadlock)
pkill -f '^python3 .*findings/poc/DF-5396/usbredir_rndis.py' 2>/dev/null || true

rm -f rig.pid rig-ser.sock rig-mon.sock
qemu-system-x86_64 \
    -enable-kvm -m 4096 -smp 6 \
    -drive file=disk.qcow2,if=virtio,format=qcow2 \
    -device piix3-usb-uhci,id=uhci0 \
    -chardev socket,id=cd0,host=127.0.0.1,port=45600,reconnect=1 \
    -netdev user,id=n0,hostfwd=tcp:127.0.0.1:5522-:22 \
    -device virtio-net-pci,netdev=n0 \
    -display none -monitor unix:rig-mon.sock,server,nowait \
    -serial unix:rig-ser.sock,server,nowait \
    -daemonize -pidfile rig.pid \
    2>qemu-stderr.log || true
echo "qemu pid $(cat rig.pid 2>/dev/null) -- waiting for ssh..."
i=0
while [ $i -lt 120 ]; do
    if ssh -F config -o ConnectTimeout=4 -o BatchMode=yes dfbsd-maxx true >/dev/null 2>&1; then
        echo "guest up"
        exit 0
    fi
    sleep 3; i=$((i+3))
done
echo "TIMEOUT waiting for guest ssh" >&2
exit 1
