#!/bin/sh
# parse interface configuration tuples:
#   iface:proto[:ipv4addr/netmask[:ipv4gw]]
# and write it down as intended

fatal() { echo "error: $*" >&2; exit 1; }

# simple etcnet configurations are also picked up by NM
if type -t NetworkManager >&/dev/null ||
   type -t connmand >&/dev/null; then
	NMCTL=yes
else
	NMCTL=no
fi

IFACEDIR="/etc/net/ifaces"

# uses global variables
write_iface() {
	dir="$IFACEDIR/$iface"
	mkdir -p "$dir"
	append=
	case "$proto" in
	dhcp)
		append="DHCP_TIMEOUT=3"
		;;
	static)
		[ -n "$ipv4addr" ] || fatal "ipv4addr missing"
		echo "$ipv4addr" > "$dir/ipv4address"
		[ -z "$ipv4gw" ] ||
			echo "default via $ipv4gw" > "$dir/ipv4route"
		;;
	*)
		fatal "unknown proto value: $proto"
		;;
	esac
	{
		echo "TYPE=eth"
		echo "BOOTPROTO=$proto"
		echo "NM_CONTROLLED=$NMCTL"
		echo "DISABLED=$NMCTL"
		echo "#USE_IFPLUGD=yes"
		[ -z "$append"] || echo "$append"
	} > "$dir/options"
}

[ -z "$GLOBAL_NET_ETH" ] ||
	echo "$GLOBAL_NET_ETH" \
	| tr ' ' '\n' \
	| while IFS=':' read iface proto ipv4addr ipv4gw; do
		[ -n "$iface" -a -n "$proto" ] || continue
		write_iface
	done