#!/bin/sh
# arje-net-up — sube las interfaces de red y prepara los directorios de
# runtime que servicios "systemd-aware" (sshd, etc.) esperan que
# alguien les haya creado. Reemplaza parcialmente lo que
# systemd-networkd + tmpfiles harían en un boot normal de Fedora.
#
# Modelo: DHCP en foreground sobre la primera interfaz no-loopback.
# arje lo supervisa con Restart, así que si dhclient muere se relanza.
# IPv6 vía RA lo maneja el kernel solo al subir el link.

set -u

# Directorios que servicios sin systemd necesitan poblados.
mkdir -p /run/sshd        # PID file de sshd
mkdir -p /var/empty/sshd  # privsep chroot

# Up todas las interfaces "reales". Se excluyen las virtuales obvias.
for sysiface in /sys/class/net/*; do
    [ -d "$sysiface" ] || continue
    name="$(basename "$sysiface")"
    case "$name" in
        lo|sit*|tun*|tap*|veth*|docker*|br-*|cni*|virbr*) continue ;;
    esac
    ip link set "$name" up 2>/dev/null || true
done

# DHCP en foreground sobre la primera interfaz real encontrada.
iface=""
for sysiface in /sys/class/net/*; do
    [ -d "$sysiface" ] || continue
    name="$(basename "$sysiface")"
    case "$name" in
        lo|sit*|tun*|tap*|veth*|docker*|br-*|cni*|virbr*) continue ;;
    esac
    iface="$name"
    break
done

if [ -z "$iface" ]; then
    echo "[arje-net-up] no encontré interfaces — durmiendo" >&2
    exec sleep infinity
fi

echo "[arje-net-up] interfaz elegida: $iface"
if command -v dhclient >/dev/null 2>&1; then
    # `-d` = foreground (sin daemonizar), `-v` = más verbose en stderr.
    echo "[arje-net-up] dhclient -d -v $iface"
    exec dhclient -d -v "$iface"
elif command -v dhcpcd >/dev/null 2>&1; then
    # `-B` = foreground (no daemonize) en dhcpcd.
    echo "[arje-net-up] dhcpcd -B $iface"
    exec dhcpcd -B "$iface"
elif command -v udhcpc >/dev/null 2>&1; then
    # busybox udhcpc — `-f` foreground.
    echo "[arje-net-up] udhcpc -f -i $iface"
    exec udhcpc -f -i "$iface"
else
    echo "[arje-net-up] sin cliente DHCP — mantengo el link up (SLAAC) y duermo" >&2
    exec sleep infinity
fi
