#!/bin/sh /etc/rc.common
# Copyright (C) 2006-2011 OpenWrt.org
START=55

DEFAULT=/etc/default/pppoe-server

. /etc/functions.sh
pppoe_user_get(){
 config_get enable $1 enable
 config_get USERNAME $1 USERNAME
 config_get PASSWORD $1 PASSWORD
 config_get IPADDRESS $1 IPADDRESS
 chap=$(uci get pppoeserver.@service[0].chap)
 nat=$(uci get pppoeserver.@service[0].nat)
 if [ "$nat" == "1" ];then
 [ "$(iptables -t nat -L POSTROUTING| grep -c ${IPADDRESS%.*}.0/24)" == "0" ]&&[ "$IPADDRESS" != "*" ]&&iptables -t nat -A POSTROUTING -s ${IPADDRESS%.*}.0/24 -j MASQUERADE
 fi
 [ "$enable" == "1" ]&&echo "$USERNAME	*	$PASSWORD	$IPADDRESS" >>/var/secrets
}

pppoe_server_get(){
 config_get enable $1 enable
 config_get serverip $1 serverip
 config_get clientip $1 clientip
 config_get dns1 $1 dns1
 config_get dns2 $1 dns2
 config_get chap $1 chap
 config_get nat $1 nat
 config_get log $1 log

echo "# PPP options for the PPPoE server" >/etc/ppp/pppoe-server-options
echo "# LIC: GPL" >>/etc/ppp/pppoe-server-options
        if [ "$chap" == "1" ];then
	       echo "require-chap" >>/etc/ppp/pppoe-server-options
	        else
		echo "debug" >>/etc/ppp/pppoe-server-options
		echo "logfile $log" >>/etc/ppp/pppoe-server-options
		echo "show-password" >>/etc/ppp/pppoe-server-options
		echo "-chap" >>/etc/ppp/pppoe-server-options
	       echo "require-pap" >>/etc/ppp/pppoe-server-options
	fi
	echo "#login" >>/etc/ppp/pppoe-server-options
	echo "auth" >>/etc/ppp/pppoe-server-options
	echo "mru 1480" >>/etc/ppp/pppoe-server-options
	echo "mtu 1480" >>/etc/ppp/pppoe-server-options
	echo "lcp-echo-interval 10" >>/etc/ppp/pppoe-server-options
	echo "lcp-echo-failure 2" >>/etc/ppp/pppoe-server-options
	echo "ms-dns $dns1" >>/etc/ppp/pppoe-server-options
	echo "ms-dns $dns2" >>/etc/ppp/pppoe-server-options
	echo "#USERNAME  PROVIDER  PASSWORD  IPADDRESS" >/var/secrets

	iptables -A INPUT -i ppp+ -j ACCEPT
	iptables -A FORWARD -i ppp+ -j ACCEPT
	iptables -A FORWARD -o ppp+ -j ACCEPT
	iptables -A OUTPUT -o ppp+ -j ACCEPT

        if [ "$nat" == "1" ];then
		[ ! $(uci show firewall|grep firewall.@defaults|grep .forward=ACCEPT) ] && {
	  
	 	 uci set firewall.@defaults[0].output=ACCEPT
		  uci set firewall.@defaults[0].forward=ACCEPT
		  uci commit firewall
		  /etc/init.d/firewall restart
			}
		echo 1 > /proc/sys/net/ipv4/ip_forward
 	        [ "$(iptables -t nat -L POSTROUTING| grep -c ${clientip%.*}.0/24)" == "0" ]&&iptables -t nat -A POSTROUTING -s ${clientip%.*}.0/24 -j MASQUERADE
		
	fi
        /usr/sbin/pppoe-server -k -T 60 -I br-lan -N 100 -L ${clientip%.*}.1 -R ${clientip%.*}.2
}


start() {
	[ "$(ps -a 2>&1 | grep 'pppoe-server' | grep -v -c 'grep' | awk -F " " '{print $1}')" != "0" ]&&killall pppoe-server
	config_load pppoeserver
	iptables -t nat -F POSTROUTING

	enable=$(uci get pppoeserver.@service[0].enable)
	if [ "$enable" == "1" ];then
		config_foreach pppoe_server_get service
		config_foreach pppoe_user_get pppoeuser

        if [ "$chap" == "1" ];then
		    cp /var/secrets /etc/ppp/chap-secrets
	        else
		    cp /var/secrets /etc/ppp/pap-secrets
        fi
	rm /var/secrets
	else
		iptables -t nat -A POSTROUTING -j zone_lan_nat
		iptables -t nat -A POSTROUTING -j zone_wan_nat
		iptables -t nat -A POSTROUTING -j postrouting_rule
	fi
}

stop() {
	[ "$(ps -a 2>&1 | grep 'pppoe-server' | grep -v -c 'grep' | awk -F " " '{print $1}')" != "0" ]&&killall pppoe-server
	iptables -t nat -A POSTROUTING -j zone_lan_nat
	iptables -t nat -A POSTROUTING -j zone_wan_nat
	iptables -t nat -A POSTROUTING -j postrouting_rule
	service_stop /usr/sbin/pppoe-server
	fw3 restart
}
