#!/bin/sh
# DF-5063 — composite-minor probe (run after df5063_sdcomp.sh setup + /tmp/mk built).
# NOTE: reads are 512-byte aligned (vinum rejects unaligned I/O).
export PATH=/sbin:/bin:/usr/sbin:/usr/bin
echo "== sanity: raw devices still work"
dd if=/dev/vinum/sd/s0 bs=512 count=1 2>/dev/null | tr -d '\0' | head -c 20; echo " <- raw sd s0"

printf 'SD-S0-DATA' | dd of=/dev/vinum/sd/s0 bs=512 seek=0 conv=sync 2>/dev/null

echo "== baseline: hand-made rawplex p0 node (minor 0x50000000)"
rm -f /tmp/px0;      /tmp/mk /tmp/px0 32 1342177280
dd if=/tmp/px0 bs=512 count=1 2>&1 | tail -1

echo "== baseline: composite SD pord=0 sord=0 (minor 0x20000000, VALID slot)"
rm -f /tmp/sdc00;    /tmp/mk /tmp/sdc00 32 536870912
dd if=/tmp/sdc00 bs=512 count=1 2>/dev/null | tr -d '\0' | head -c 20; echo " <- composite SD (0,0)"; dd if=/tmp/sdc00 bs=512 count=1 2>&1 | tail -1

echo "== composite SD pord=1 sord=0 (minor 0x20010000, EMPTY slot -> Plexno -1 -> PLEX[-1])"
rm -f /tmp/sdc10;    /tmp/mk /tmp/sdc10 32 536936448
dd if=/tmp/sdc10 bs=512 count=1 2>&1 | tail -1

echo "== composite SD pord=2 sord=0 (minor 0x20020000)"
rm -f /tmp/sdc20;    /tmp/mk /tmp/sdc20 32 537001984
dd if=/tmp/sdc20 bs=512 count=1 2>&1 | tail -1

echo "== composite SD pord=2 sord=1 (minor 0x20120000)"
rm -f /tmp/sdc21;    /tmp/mk /tmp/sdc21 32 538050560
dd if=/tmp/sdc21 bs=512 count=1 2>&1 | tail -1

echo "== composite PLEX pord=0 (minor 0x10000000, valid slot)"
rm -f /tmp/pxc0;     /tmp/mk /tmp/pxc0 32 268435456
dd if=/tmp/pxc0 bs=512 count=1 2>&1 | tail -1

echo "== composite PLEX pord=2 (minor 0x10020000, empty slot)"
rm -f /tmp/pxc2;     /tmp/mk /tmp/pxc2 32 268632064
dd if=/tmp/pxc2 bs=512 count=1 2>&1 | tail -1

echo "== sweep all empty-slot ordinals (pord 1..7, sord 0..7)"
p=1
while [ $p -le 7 ]; do
    s=0
    while [ $s -le 7 ]; do
        M=$(( (2 << 28) | (p << 16) | (s << 20) ))
        rm -f /tmp/sw; /tmp/mk /tmp/sw 32 $M >/dev/null 2>&1
        OUT=$(dd if=/tmp/sw bs=512 count=1 2>&1 | head -1)
        echo "pord=$p sord=$s minor=$(printf 0x%x $M): $OUT"
        s=$((s+1))
    done
    p=$((p+1))
done

echo "== done"
dmesg | tail -5

