#!/usr/bin/env bash # net-setup.sh -- create the tap + bridge the VT1200 harness needs on the host. # # Idempotent: safe to re-run, and NEEDS re-running after a reboot, because both # the tap and the bridge are runtime kernel state and do not survive one. # # ./harness/net-setup.sh # # The tap is owned by your user, which is what lets MAME attach to it with no # sudo and no capabilities of its own. The bridge gets an address so the host # can serve BOOTP and TFTP to the terminal. # # IMPORTANT: both interfaces will still show DOWN until MAME opens the tap. A # tap has carrier only while a process holds it open, and a bridge whose only # port has no carrier reports down. That is correct, not a failure. set -euo pipefail UID_="$(id -u)" USER_="$(id -un)" TAP="tap-mess-${UID_}-0" # MAME's own naming: taptun.cpp, "tap-mess-%d-0" BRIDGE="vt1200" ADDR="192.168.99.1/24" if ! sudo -n true 2>/dev/null; then echo "net-setup: needs passwordless sudo (or run these by hand):" >&2 echo " ip tuntap add dev $TAP mode tap user $USER_" >&2 echo " ip link add dev $BRIDGE type bridge" >&2 exit 1 fi if ip link show "$TAP" >/dev/null 2>&1; then echo "net-setup: $TAP exists, leaving it" else sudo -n ip tuntap add dev "$TAP" mode tap user "$USER_" echo "net-setup: created $TAP (owned by $USER_)" fi if ip link show "$BRIDGE" >/dev/null 2>&1; then echo "net-setup: $BRIDGE exists, leaving it" else sudo -n ip link add dev "$BRIDGE" type bridge echo "net-setup: created $BRIDGE" fi sudo -n ip link set "$TAP" master "$BRIDGE" sudo -n ip link set "$TAP" up sudo -n ip link set "$BRIDGE" up # single-member bridge: no STP, so it forwards immediately instead of after ~30s sudo -n ip link set "$BRIDGE" type bridge stp_state 0 sudo -n ip addr replace "$ADDR" dev "$BRIDGE" echo echo "host side now:" ip -brief addr show "$BRIDGE" | sed 's/^/ /' ip -brief link show "$TAP" | sed 's/^/ /' echo echo "reminder: both read DOWN until MAME holds the tap. Then run, in another shell:" echo " sudo python3 -u harness/serve.py 192.168.99.1 --bootp" echo " ./run.sh net"