#!/bin/sh

test -n "$FAILSAFE" && exit

. /etc/functions.sh

DIRTY=
if [ -n "$(nvram get ff_ip)" ]; then
	# Provide nvram compatiblity for FFF < 0.7 users
	nvram set wifi_ipaddr=$(nvram get ff_ip)
	nvram unset ff_ip
	nvram set wifi_netmask=$(nvram get ff_mask)
	nvram unset ff_mask
	nvram set wl0_ssid=$(nvram get ff_essid)
	nvram unset ff_essid
	nvram set wl0_channel=$(nvram get ff_chan)
	nvram unset ff_chan
	nvram unset ff_cvs
	if [ "olsr" = "$(nvram get wan_proto)" ];then
		nvram set wan_proto=static
	fi
	if [ "olsr" = "$(nvram get lan_proto)" ];then
		nvram set lan_proto=static
	fi
	nvram set wl0_mode=sta
	nvram set wl0_infra=0
	DIRTY=1
fi

# Set defaults here, at minimum the ip address

DEF_ADR=
DEF_MSK=255.0.0.0
DEF_SSID=olsr.freifunk.net
DEF_CHAN=10
DEF_FRAG=512
DEF_RTS=250
DEF_ANTDIV=1
DEF_HOSTNAME=

dev=$(awk 'sub(":","") {print $1}' /proc/net/wireless)

if [ -n "$DEF_ADR" ]; then
	nvram set wifi_ipaddr=$DEF_ADR
	nvram set wifi_netmask=$DEF_MSK
	nvram set wl0_ssid=$DEF_SSID
	nvram set wl0_channel=$DEF_CHAN
	nvram set wl0_frag=$DEF_FRAG
	nvram set wl0_rts=$DEF_RTS
	nvram set wl0_antdiv=$DEF_ANTDIV
	test -n "$DEF_HOSTNAME" && nvram set wan_hostname=$DEF_HOSTNAME
	nvram set wl0_mode=sta
	nvram set wl0_infra=0
	# For nvram erase: set wl0_ifname prevents "wifi up" defaults
	test -z "$(nvram get wl0_ifname)" && nvram set wl0_ifname=$dev
	DIRTY=1
fi

if [ -n "$dev" ]; then
	fnd=
	old="$(nvram get lan_ifnames)"
	for i in $old; do
		test "$i" = "$dev" && fnd=1
	done

	wbr=
	adr=$(nvram get wifi_ipaddr)
	if [ -z "$adr" ] || [ "$adr" = "$(nvram get lan_ipaddr)" ];then
		# WIFI dev should be in the bridge list
		wbr=1
	fi

	if [ "$wbr" != "$fnd" ]; then
		if [ -z "$wbr" ]; then
			new=
			for i in $old; do
				test "$i" != "$dev" && new="$new $i"
			done
			new=${new# }
		else
			new="$old $dev"
		fi
		nvram set lan_ifnames="$new"
		if [ -z "$(/usr/sbin/nvram get lan_ifname)" ]; then
			lan=$(nvram get lan_ifname)
			test -z "$lan" || lan=br0
			nvram set lan_ifname=$lan
		fi
		DIRTY=1
	fi

	if [ "$(nvram get wifi_ifname)" != "$dev" ]; then
		nvram set wifi_ifname=$dev
		DIRTY=1
	fi

	if [ -z "$(nvram get wifi_proto)" ]; then
		nvram set wifi_proto=static
		DIRTY=1
	fi

	if [ -n "$(nvram get lan_gateway)" ] && [ "$(nvram get lan_gateway)" = "$(nvram get lan_ipaddr)" ]; then
		nvram unset lan_gateway
		DIRTY=1
	fi

	if [ -n "$(nvram get wan_gateway)" ] && [ "$(nvram get wan_gateway)" = "$(nvram get wan_ipaddr)" ]; then
		nvram unset wan_gateway
		DIRTY=1
	fi
fi

if [ -z "$(/usr/sbin/nvram get wan_ifname)" ]; then
	nvram set wan_ifname=$(nvram get wan_ifname)
	nvram set wan_proto=$(nvram get wan_proto)
	DIRTY=1
fi

test -n "$DIRTY" && nvram commit
rm -f $0
