#!/bin/sh
# bashclub-be: Prüfung vor der Bestätigung eines Probe-Boots. Netz da?
# Default-Route (IPv4 oder IPv6) und das Gateway antwortet: per Ping oder,
# wenn es Ping filtert, als erreichbarer Nachbar (ARP/NDP nach dem Versuch).
# Default-Route ohne Gateway (Punkt-zu-Punkt): Gerät muss oben sein.
for fam in 4 6; do
	ip -"$fam" route show default 2>/dev/null | while read -r line; do
		gw=$(printf '%s\n' "$line" | awk '{for (i = 1; i < NF; i++) if ($i == "via") {print $(i + 1); exit}}')
		dev=$(printf '%s\n' "$line" | awk '{for (i = 1; i < NF; i++) if ($i == "dev") {print $(i + 1); exit}}')
		if [ -z "$gw" ]; then
			[ -n "$dev" ] && ip link show dev "$dev" up 2>/dev/null | grep -q . && exit 10
			continue
		fi
		ping -"$fam" -c 1 -W 2 ${dev:+-I "$dev"} "$gw" >/dev/null 2>&1 && exit 10
		ip -"$fam" neigh show "$gw" ${dev:+dev "$dev"} 2>/dev/null | grep -qE 'REACHABLE|STALE|DELAY|PROBE' && exit 10
	done
	[ $? = 10 ] && exit 0
done
echo "kein Default-Gateway erreichbar ($(ip route show default 2>/dev/null | head -n 1))"
exit 1
