#!/bin/sh

[ "$METHOD" == "ppp" ] || exit 0
[ "$IF_USE_TEMPLATE" ] || exit 0

[ -d /var/lock ] || mkdir /var/lock

[ -f "/etc/ppp/templates/$IF_USE_TEMPLATE" ] || {
	logger "$0: requested template '/etc/ppp/templates/$IF_USE_TEMPLATE' not found."
	exit 1
}

IDLEOPTIONS="persist\nmaxfail 0"
[ "$IF_PPP_IDLETIME" ] && {
  if [ "$IF_PPP_IDLETIME" -gt 0 ]; then
	IDLEOTPIONS="idletime $IF_PPP_IDLETIME"
  fi
}

[ "$IF_PPP_MTU" ] || IF_PPP_MTU=1412
if [ "$IF_PPP_MTU" -gt 0 ] ; then
	NETWORKOPTIONS="mtu $IF_PPP_MTU\nmru $IF_PPP_MTU"
fi

[ "$IF_PPP_VPI" ] || IF_PPP_VPI=1
[ "$IF_PPP_VCI" ] || IF_PPP_VCI=32

REPLACE="
	s,#IDLEOPTIONS#,$IDLEOPTIONS,
	s,#ENCAPS#,$IF_PPP_ENCAPS,
	s,#VPI#,$IF_PPP_VPI,
	s,#VCI#,$IF_PPP_VCI,
	s,#USERNAME#,$IF_PPP_USERNAME,
	s,#PASSWORD#,$IF_PPP_PASSWORD,
	s,#DEVICE#,$IF_PPP_DEVICE,
	s,#MODEMIP#,$IF_PPP_MODEMIP,
	s,#NETWORKOPTIONS#,$NETWORKOPTIONS,
"

sed "$REPLACE" < /etc/ppp/templates/$IF_USE_TEMPLATE > /etc/ppp/peers/$IF_PROVIDER

case "$IF_PPP_DEVICE" in
eth*)
	ip link set up dev $IF_PPP_DEVICE
	;;
nas*)
	[ "$IF_PPP_ENCAPS" ] || encap=0
	[ "$IF_PPP_PAYLOAD" ] || payload=1

	case "$IF_PPP_PAYLOAD" in
		bridged)
			payload=1
			;;
		routed)
			payload=0
			;;
		*)
			echo "Wrong payload, use either bridged or routed"
			exit 1
			;;
	esac

	case "$IF_PPP_ENCAPS" in
		llc)
			encap=0
			;;
		vc)
			encap=1
			;;
		*)
			echo "Wrong Encapsulation use either llc or vc"
			exit 1
			;;
	esac

	count=$(echo $IF_PPP_DEVICE|sed -e "s/nas//")
	br2684ctl -b -c $count -e $encap -p $payload -a $IF_PPP_VPI.$IF_PPP_VCI
	ip link set up dev $IF_PPP_DEVICE
	;;
esac

case "$IF_USE_TEMPLATE" in
umts)
	# wait for card to initialize
	COUNT=0
	while [ $((COUNT++)) -lt 20 ]; do
		[ -c "$IF_PPP_DEVICE" ] && break
		[ $COUNT -eq 20 ] && {
			logger "$0: '$IF_PPP_DEVICE' not found"
			exit 1
		}
		sleep 1
	done

	# wait till the SIM is ready
	comgt -s /etc/comgt/waitready.comgt -d $IF_PPP_DEVICE || exit 1

	# set pincode
	if [ "$IF_PIN" ]; then
		COMGTPIN="$IF_PIN" comgt PIN -d $IF_PPP_DEVICE || exit 1
	fi

	# set APN
	COMGTAPN="$IF_APN" comgt APN -d $IF_PPP_DEVICE || exit 1

	# set umts/gprs mode if available (Option cards only)
	case "$IF_MODE" in
		gprs_only)	comgt 2G -d $IF_PPP_DEVICE ;;
		umts_only)	comgt 3G -d $IF_PPP_DEVICE ;;
		umts_first)	comgt 3G2G -d $IF_PPP_DEVICE ;;
		"")		;;
		*)		echo "unknown mode, exiting"
				exit 1
				;;
	esac
	;;
esac
