#!/bin/sh
. /etc/functions.sh
PPP_IFACE="$1"
PPP_TTY="$2"
PPP_SPEED="$3"
PPP_LOCAL="$4"
PPP_REMOTE="$5"
PPP_IPPARAM="$6"

unit="${PPP_IFACE##ppp}"
#now default route is controled by /etc/wan_detect.sh
#[ "$unit" -eq "1" ] && restore_default_route
#[ "$unit" -eq "0" ] && [ "$(uci -q -P /var/state get network.3gwan.up)" == "1" ] && route add default dev ppp1

logger -p 160.5 "[IP-DOWN] IFACE=$PPP_IFACE TTY=$PPP_TTY SPEED=$PPP_SPEED LOCAL=$PPP_LOCAL REMOTE=$PPP_REMOTE IPPARAM=$PPP_IPPARAM"
	
if [ "$unit" -ge "30" ]; then
	if [ "$unit" -le "400" ]; then
		idx=0
		while [ $(uci -q -c /etc/config/grocx/ get pptp.$idx.ppp_num) != "$unit" -a "$idx" -lt "32" ]; do
			idx="$(($idx + 1))"
		done
		if [ "$idx" -lt "32" ]; then
			Tname=$(uci -q -c /etc/config/grocx/ get pptp.$idx.name)
			/sbin/pptp_static_route del T$Tname $PPP_IFACE
		fi
		
		droute=$(uci -q -c /etc/config/grocx/ get pptp.$idx.def_route)
		[ "$droute" == "1" ] && {
			remote_dn=`uci -q -c /etc/config/grocx/ get pptp.$idx.remote_ip || echo 1.2.3.4`
			remote_ip=`uci -q -P /var/state get network.wan.pptpsrv`
			wan_mtu=`uci -q get network.wan.mtu`
			gw_ip=`uci -P /var/state get network.wan.gateway`
			iptables -D zone_wan_nat -t nat -s $(uci -q get network.lan.ipaddr)/$(uci -q get network.lan.netmask) -o $PPP_IFACE -j MASQUERADE
			[ -z "$wan_mtu" ] && {
				iptables -D zone_wan_MSSFIX -o $PPP_IFACE -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu 2>/dev/null
			} || {
				let "wan_mss = wan_mtu - 40"
				iptables -D zone_wan_MSSFIX -o $PPP_IFACE -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --set-mss $wan_mss 2>/dev/null
			}
			route del default
			restore_default_route
			route del ${remote_ip:-remote_dn} gw ${gw_ip} dev $(route | grep default | awk '{printf $8}')
			flush-ipconntrack 1 &
		}
		
		# remove rule for nat mode
		iptables -t nat -D POSTROUTING -s $(uci -q get network.lan.ipaddr)/$(uci -q get network.lan.netmask) -o $PPP_IFACE -j MASQUERADE 2>/dev/null
	fi
	rnet=$(uci -q -P /var/state get network.vpnup.rnet_$PPP_IFACE)
	rmask=$(uci -q -P /var/state get network.vpnup.rmask_$PPP_IFACE)
	wan_dev=$(uci -p /var/state/ -q get network.wan.ifname)
	iptables -t nat -D zone_wan_nat -s $rnet/$rmask -o $wan_dev -j MASQUERADE > /dev/null 2>&1
	uci -q -P /var/state revert network.vpnup.$PPP_IFACE		
	uci -q -P /var/state revert network.vpnup.mppe_$PPP_IFACE
	uci -q -P /var/state revert network.vpnup.rnet_$PPP_IFACE
	uci -q -P /var/state revert network.vpnup.rmask_$PPP_IFACE
fi

ipdown=$(cat /proc/uptime | awk 'FS="[.]+" {print $1}')
export PPP_IFACE PPP_TTY PPP_SPEED PPP_LOCAL PPP_REMOTE PPP_IPPARAM
[ -z "$PPP_IPPARAM" ] || {

	if [ "$PPP_IPPARAM" == "wan" ]; then
		# remove the interface's network state (only when it was not removed in ifdown)
		uptime=$(uci -q -P /var/state get network.wan.uptime | awk 'FS="[.]+" {print $1}')
		if [ -n "$uptime" -a $ipdown -ge $uptime ]; then
			logger -p 160.5 "[IP-DOWN]revert uci network state in ip-down..."
			uci_revert_state network "$PPP_IPPARAM"
		fi
	else
		# remove the interface's network state
		uci_revert_state network "$PPP_IPPARAM"
	fi

	env -i ACTION="ifdown" INTERFACE="$PPP_IPPARAM" DEVICE="$PPP_IFACE" PROTO=ppp /sbin/hotplug-call "iface"
}

[ -d /etc/ppp/ip-down.d ] && {
	for SCRIPT in /etc/ppp/ip-down.d/*
	do
		[ -x "$SCRIPT" ] && "$SCRIPT" $@
	done
}
