#!/bin/sh

# All gateways show up as "default via 192.168.10.1 dev eth0"
# except ppp0 which has no gateway, shows up as "default dev ppp0".

if [ $# -eq 0 ]; then
	# logger "$IFACE is up, storing gw"

	dev=$(ip route list 0/0 | head -n1 | cut -d ' ' -f 5)
	gw=$(ip route list 0/0 | head -n1 | cut -d ' ' -f 3)

  	# logger "found gateway '$gw' for device '$dev'"

	if [ -z "$dev" -o -z "$gw" -o "$dev" != "$IFACE" ]; then
		exit
	fi

	path="/var/lib/ebee/gw.$dev"
	echo $gw > $path
	logger "stored '$gw' to '$path'"
	exit
fi

# logger "setting default gw for backend device '$1'"

shift=3;
if [ "$1" != "ppp0" ]; then
	shift=5
fi

dev=$(ip route list 0/0 | head -n1 | cut -d ' ' -f $shift)
num=$(ip route list 0/0 | wc -l)

# exit if the expected single gateway is already set

if [ "$1" == "$dev" -a $num -eq 1 ]; then
	exit
fi

# exit if the device is not present

if [ ! -d /sys/class/net/$1 ]; then
	exit
fi

if [ "$1" == "ppp0" ]; then
	ip route flush 0/0 2>/dev/null
	route add default dev ppp0 2>/dev/null
	logger "made '$1' the default route"
	exit
fi

if [ $(cat /sys/class/net/$1/operstate) != "up" ]; then
	exit
fi

path="/var/lib/ebee/gw.$1"
if [ ! -f "$path" ]; then
	exit
fi

gw=$(cat "$path")
if [ -z "$gw" ]; then
	exit
fi

ip route flush 0/0 2>/dev/null
route add default gw $gw $1 2>/dev/null
logger "made '$1' the default route using gw '$gw'"
