#!/usr/bin/env bash
# Diag-only link-local /32 peers for pos3↔pos4 ARP reachability checks.
# Does not affect POG422 0x88B5 traffic (separate from game path).
#
# Usage (sudo):
#   FIXTURE_POS=3 DEVICE=eth1 ./br0_link_diag.sh setup
#   FIXTURE_POS=4 DEVICE=eth1 ./br0_link_diag.sh setup
#   FIXTURE_POS=3 DEVICE=br0 ./br0_link_diag.sh setup   # legacy br0 only

set -euo pipefail

DEVICE="${DEVICE:-${INTERFACE:-br0}}"
INTERFACE="${INTERFACE:-${DEVICE}}"
FIXTURE_POS="${FIXTURE_POS:-}"

if [[ "${EUID}" -ne 0 ]]; then
  echo "FATAL: run with sudo" >&2
  exit 1
fi

if [[ -z "${FIXTURE_POS}" ]] || ! [[ "${FIXTURE_POS}" =~ ^[34]$ ]]; then
  echo "FATAL: FIXTURE_POS=3 or 4 required" >&2
  exit 1
fi

if [[ "${FIXTURE_POS}" == "3" ]]; then
  LOCAL_IP="169.254.3.3"
  PEER_IP="169.254.4.4"
else
  LOCAL_IP="169.254.4.4"
  PEER_IP="169.254.3.3"
fi

case "${1:-setup}" in
  setup)
    if ! ip link show "${DEVICE}" >/dev/null 2>&1; then
      echo "FATAL: ${DEVICE} not found" >&2
      exit 1
    fi
    if ip -br addr show dev "${DEVICE}" 2>/dev/null | grep -q "${LOCAL_IP}"; then
      echo "diag IP already set: ${LOCAL_IP} peer ${PEER_IP} on ${DEVICE}"
    else
      ip addr add "${LOCAL_IP}/32" peer "${PEER_IP}/32" dev "${DEVICE}"
      echo "diag IP added: ${LOCAL_IP} peer ${PEER_IP} on ${DEVICE}"
    fi
    ;;
  teardown)
    ip addr del "${LOCAL_IP}/32" dev "${DEVICE}" 2>/dev/null || true
    echo "diag IP removed from ${DEVICE} (if present)"
    ;;
  *)
    echo "Usage: FIXTURE_POS=3|4 [DEVICE=eth1|br0] $0 setup|teardown" >&2
    exit 1
    ;;
esac

exit 0
