#!/bin/sh

WITHOUT_RC_COMPAT=1

# Source function library.
. /etc/init.d/functions

cd /etc/sysconfig/network-scripts
. network-functions

# ifup-post for PPP is handled through /etc/ppp/ip-up

if [ "$1" = daemon ]; then
	# we've been called from ppp-watch, so don't invoke it for persistence
	shift
else
	# just in case a full path to the configuration file is passed in
	CONFIG="${1##*/}"
	[ -f "$CONFIG" ] || CONFIG="ifcfg-$1"
	source_config
	if ! is_yes "$DEMAND" ]; then
		# let ppp-watch do the right thing
		shift
		exec /sbin/ppp-watch "$DEVICE" "$@"
	fi
fi

CONFIG=$1
[ -f "$CONFIG" ] || CONFIG="ifcfg-$1"
source_config

if [ -z "$DISCONNECTTIMEOUT" ]; then
  DISCONNECTTIMEOUT=2
fi

if [ -z "$RETRYTIMEOUT" ]; then
  RETRYTIMEOUT=30
fi

if [ -z "$IDLETIMEOUT" ]; then
  IDLETIMEOUT=600
fi

if [ "$2" = boot ] && ! is_yes "$ONBOOT"; then
  exit
fi
PPPD=/usr/sbin/pppd
[ -x "$PPPD" ] || {
  echo "$PPPD does not exist or is not executable"
  echo "ifup-ppp for $DEVICE exiting"
  logger -p daemon.info -t ifup-ppp \
    "$PPPD does not exist or is not executable for $DEVICE"
  exit 1
}

[ -n "$WVDIALSECT" -o -f "/etc/sysconfig/network-scripts/chat-$DEVICE" ] || {
  echo "/etc/sysconfig/network-scripts/chat-$DEVICE does not exist"
  echo "ifup-ppp for $DEVICE exiting"
  logger -p daemon.info -t ifup-ppp \
    "/etc/sysconfig/network-scripts/chat-$DEVICE does not exist for $DEVICE"
  exit 1
}

opts="lock"
if [ -n "$CALL" ]; then
	opts="$opts call $CALL"
fi
if ! is_no "$HARDFLOWCTL"; then
  opts="$opts modem crtscts"
fi
if ! is_yes "$ESCAPECHARS"; then
  opts="$opts asyncmap 00000000"
fi
if ! is_no "$DEFROUTE"; then
  # pppd will no longer delete an existing default route
  # so we have to help it out a little here.
  route del default >/dev/null 2>&1
  opts="$opts defaultroute"
fi
if ! is_no "$PEERDNS"; then
  opts="$opts usepeerdns"
fi
if [ -n "$MRU" ] ; then
  opts="$opts mru $MRU"
fi
if [ -n "$MTU" ] ; then
  opts="$opts mtu $MTU"
fi
if [ -n "$IPADDR$REMIP" ] ; then
  # if either IP address is set, the following will work.
  opts="$opts $IPADDR:$REMIP"
fi
if [ -n "$PAPNAME" ] ; then
  opts="$opts user $PAPNAME remotename $DEVNAME"
fi
if is_yes "$DEBUG"; then
  opts="$opts debug"
  chatdbg="-v"
fi
if is_yes "$DEMAND"; then
    opts="$opts demand ktune idle $IDLETIMEOUT holdoff $RETRYTIMEOUT"
else
  opts="$opts nodetach"
fi

if [ -z "$WVDIALSECT" ]; then
  CHATSCRIPT="/etc/sysconfig/network-scripts/chat-$DEVNAME"
  [ -f "$CHATSCRIPT" ] || {
    CHATSCRIPT="/etc/sysconfig/network-scripts/chat-$PARENTDEVNAME"
  }
else
  CHATSCRIPT=
fi

(logger -p daemon.info -t ifup-ppp \
  "pppd started for $DEVICE on $MODEMPORT at $LINESPEED" &)&

if [ -n "$WVDIALSECT" ]; then
  exec "$PPPD" $opts "$MODEMPORT" "$LINESPEED" \
    ipparam "$DEVICE" linkname "$DEVICE" \
    noauth \
    $PPPOPTIONS \
    connect "/usr/bin/wvdial --chat $WVDIALSECT"
else
  exec "$PPPD" $opts "$MODEMPORT" "$LINESPEED" \
    ipparam "$DEVICE" linkname "$DEVICE" \
    noauth \
    $PPPOPTIONS \
    connect "/usr/sbin/chat $chatdbg -f $CHATSCRIPT"
fi
