#!/bin/bash

# This script tries to create a PPP interface.

usage()
{
	echo "Usage: $0 <interface>" >&2
	exit 1
}

[ -z "$1" ] && usage
NAME=$1

. $SCRIPTDIR/functions
pickup_options

[ -x "${PPPD:=$DEFAULT_PPPD}" ] || {
	print_error "$PPPD does not exist or is not executable. Try installing ppp RPM."
	exit 1
}

[ -x "${CHAT:=$DEFAULT_CHAT}" ] || {
	print_error "$CHAT does not exist or is not executable. Try installing ppp RPM."
	exit 1
}
CHAT_CMD="$CHAT ${CHATOPTIONS:-$DEFAULT_CHATOPTIONS} -f"

# This one is a must.
BASIC_PPPOPTIONS="nolog updetach unit ${NAME//ppp/}"

PROF_PPPOPTIONSFILE=`profiled_filename $MYIFACEDIR/${PPPOPTIONSFILE:=$DEFAULT_PPPOPTIONSFILE}`
[ -s $PROF_PPPOPTIONSFILE ] || PROF_PPPOPTIONSFILE=

PROF_PPPINITCHAT=`profiled_filename $MYIFACEDIR/${PPPINITCHAT:=$DEFAULT_PPPINITCHAT}`
[ -s $PROF_PPPINITCHAT ] || PROF_PPPINITCHAT=

PROF_PPPCONNECTCHAT=`profiled_filename $MYIFACEDIR/${PPPCONNECTCHAT:=$DEFAULT_PPPCONNECTCHAT}`
[ -s $PROF_PPPCONNECTCHAT ] || PROF_PPPCONNECTCHAT=

PROF_PPPDISCONNECTCHAT=`profiled_filename $MYIFACEDIR/${PPPDISCONNECTCHAT:=$DEFAULT_PPPDISCONNECTCHAT}`
[ -s $PROF_PPPDISCONNECTCHAT ] || PROF_PPPDISCONNECTCHAT=

BASIC_PPPOPTIONS="$BASIC_PPPOPTIONS${PPPMAXFAIL:+ maxfail $PPPMAXFAIL}"
is_yes "$PPPPERSIST" && BASIC_PPPOPTIONS="$BASIC_PPPOPTIONS persist"
BASIC_PPPOPTIONS="$BASIC_PPPOPTIONS${PPPHOLDOFF:+ holdoff $PPPHOLDOFF}"
BASIC_PPPOPTIONS="$BASIC_PPPOPTIONS${PPPIDLE:+ idle $PPPIDLE}"

case "$PPPTYPE" in
	pptp)
		[ -x "${PPTP:=$DEFAULT_PPTP}" ] || {
			print_error "$PPTP does not exist or is not executable. Try installing pptp-client RPM."
			exit 1
		}
		[ -n "$PPTP_SERVER" ] || {
			print_error "ERROR: PPTP_SERVER is not set for interface $NAME with PPPTYPE $PPPTYPE"
			exit 1
		}
		PTYOPTION="$PPTP --nolaunchpppd $PPTP_SERVER"
	;;
	pppoe)
		[ -x "${PPPOE:=$DEFAULT_PPPOE}" ] || {
			print_error "$PPPOE does not exist or is not executable. Try installing rp-pppoe-client RPM."
			exit 1
		}
		[ -n "$HOST" ] || {
			print_error "WARNING: HOST is not set for interface $NAME with PPPTYPE $PPPTYPE"
			exit 1
		}
		PTYOPTION="$PPPOE -I $HOST -U"
	;;
	dialup)
		BASIC_PPPOPTIONS="$BASIC_PPPOPTIONS modem"
	;;
	*)
		print_error "unknown PPPTYPE '$PPPTYPE' for interface $NAME"
	;;
esac

# Let the show start...
$PPPD $BASIC_PPPOPTIONS $PPPOPTIONS ${PTYOPTION:+local pty "$PTYOPTION"} \
${PROF_PPPOPTIONSFILE:+ file $PROF_PPPOPTIONSFILE} \
${PROF_PPPINITCHAT:+ init "$CHAT_CMD $PROF_PPPINITCHAT"} \
${PROF_PPPCONNECTCHAT:+ connect "$CHAT_CMD $PROF_PPPCONNECTCHAT"} \
${PROF_PPPDISCONNECTCHAT:+ disconnect "$CHAT_CMD $PROF_PPPDISCONNECTCHAT"}
