#!/bin/sh /etc/rc.common
START=46
UCI_CONFIG=iprouting
config_load $UCI_CONFIG
#lan_changed: called by script:network
EXTRA_COMMANDS='lan_changed'
EXTRA_HELP='	lan_changed	reset ip address for specified lan'

add_iprouting() {
	config_get status $1 status
	[ "$status" = "enable" ] || return

	config_get wan_pf $1 wan_pf
	config_get lan_pf $1 lan_pf
	config_get ipaddr $1 ipaddr
	config_get mask $1 mask

	ip addr add $ipaddr/$mask dev lan-$lan_pf brd +
	#eval `ipcalc -b -n $ipaddr $mask`
	#classc=${NETWORK%.*}
	#host_start=${NETWORK##*.}
	#host_end=${BROADCAST##*.}
	#i=$(($host_start+1))
	#while [ $i -lt $host_end ]; do
	#	arp -i wan-$wan_pf -Ds $classc.$i wan-$wan_pf pub
	#	i=$(($i+1))
	#done
	arp -i wan-$wan_pf -Ds $ipaddr wan-$wan_pf netmask $mask pub >/dev/null 2>/dev/null
}

delete_iprouting() {
	status=`uci oget $UCI_CONFIG.$1.status`
	[ "$status" = "enable" ] || return

	wan_pf=`uci oget $UCI_CONFIG.$1.wan_pf`
	lan_pf=`uci oget $UCI_CONFIG.$1.lan_pf`
	ipaddr=`uci oget $UCI_CONFIG.$1.ipaddr`
	mask=`uci oget $UCI_CONFIG.$1.mask`

	ip addr del $ipaddr/$mask dev lan-$lan_pf 2>/dev/null
	#eval `ipcalc -b -n $ipaddr $mask`
	#classc=${NETWORK%.*}
	#host_start=${NETWORK##*.}
	#host_end=${BROADCAST##*.}
	#i=$(($host_start+1))
	#while [ $i -lt $host_end ]; do
	#	arp -i wan-$wan_pf -d $classc.$i pub
	#	i=$(($i+1))
	#done
	arp -i wan-$wan_pf -d $ipaddr netmask $mask pub >/dev/null 2>/dev/null
}

start(){
	config_foreach add_iprouting
}

stop(){
	config_foreach delete_iprouting
}

apply(){
	del=`uci fchanges delete $UCI_CONFIG`
	for cfg in $del; do
		delete_iprouting $cfg
	done

	add=`uci fchanges new $UCI_CONFIG`
	for cfg in $add; do
		add_iprouting $cfg
	done

	mdf=`uci fchanges modify $UCI_CONFIG`
	for cfg in $mdf; do
		delete_iprouting $cfg
		add_iprouting $cfg
	done

	uci commit $UCI_CONFIG
}

lan_changed(){
	changed_lan=$3
	config_foreach lan_changed2
}

lan_changed2(){
	config_get status $1 status
	[ "$status" = "enable" ] || return

	config_get lan_pf $1 lan_pf
	[ "$changed_lan" = "$lan_pf" ] || return

	config_get ipaddr $1 ipaddr
	config_get mask $1 mask
	ip addr add $ipaddr/$mask dev lan-$lan_pf brd +
}
