#!/bin/ash
. /etc/functions.sh

type=$1

if=$(nvram get ${type}_ifname)
if [ "${if%%[0-9]}" = "ppp" ]; then
	if=$(nvram get pppoe_ifname)
fi

if_valid $if || return

ip link set dev $if down 2>/dev/null
if [ "${if%%[0-9]}" = "br" ]; then
	stp=$(nvram get ${type}_stp)
	brctl delbr $if 2>/dev/null
	brctl addbr $if
	brctl setfd $if 0
	brctl stp $if ${stp:-0}
	for sif in $(nvram get ${type}_ifnames); do {
		if_valid $sif || continue
		ip link set dev $sif up
		brctl addif $if $sif
	} done
fi

mac=$(nvram get ${type}_hwaddr)
${mac:+ip link set dev $if address $mac}

if_proto=$(nvram get ${type}_proto)
case "$if_proto" in
	static)
		ip=$(nvram get ${type}_ipaddr)
		netmask=$(nvram get ${type}_netmask)
		gateway=$(nvram get ${type}_gateway)

		ip addr add dev $if $ip${netmask:+/$(ipcalc -p $ip $netmask|cut -d'=' -f2)} broadcast +
		ip link set dev $if up
		${gateway:+ip route add default via $gateway}

		[ -f /etc/resolv.conf ] && return

		for dns in $(nvram get ${type}_dns); do {
			echo "nameserver $dns" >> /etc/resolv.conf
		} done
	;;
	dhcp)
		pidfile=/var/run/${if}.pid
		if [ -f $pidfile ]; then
			kill $(cat $pidfile)
		fi
		ip link set dev $if up
		udhcpc -i $if -b -p $pidfile &
	;;
	pppoe)
		username=$(nvram get ppp_username)
		password=$(nvram get ppp_passwd)
		redial=$(nvram get ppp_redialperiod)
		idletime=$(nvram get ppp_idletime)
		mtu=$(nvram get wan_mtu)

		ip link set dev $if up
		/sbin/pppoecd $if -u $username -p $password \
			-i 0 -I $redial -T $idletime -t $mtu -k
	;;
	none)
	;;
	*)
		echo "### WARNING $if: $if_proto is not supported"
	;;
esac
