#!/bin/sh
|
# FILE:/usr/sbin/ifup-ppp
|
# Copyright (C) 2011 GuoWenxue <guowenxue@gmail.com>
|
# This file used to do PPP dial up.
|
|
#--------------------------------------------------
|
# Function definition here
|
#--------------------------------------------------
|
usage()
|
{
|
prog=`basename $0`
|
echo "$prog Usage: $prog [-d /dev/ttyUSB0] [-a apn] [-u username] [-p password] [-v chap/pap] [-i ipaddr] pppXX"
|
echo ""
|
echo " This shell script used to do pppd dial up on GPRS/3G modem, if no options gived, it"
|
echo "will use the default configure file \"$network_cfg_dir/ifcfg-pppXX\". If get options"
|
echo "in this command, it will use the option from the command line, and be careful the -d"
|
echo "option must be given to specify the modem device."
|
echo ""
|
|
echo "pppXX: Required, specify the dial up generated PPP device, such as ppp10."
|
echo "-d: Required, if use command line options, specify the modem TTY device."
|
echo "-a: Option, APN(Access Point Name) for the SIM card provider."
|
echo "-u: Option, username for the GPRS login if needed."
|
echo "-p: Option, password for the GPRS login if needed."
|
echo "-v: Option, authenticate method, pap or chap."
|
echo "-i: Option, <local_IP_address>:<remote_IP_address> such as 0.0.0.0:0.0.0.0 "
|
echo "Example: ifup-ppp -d /dev/ttyUSB0 -a 3gnet -u uid -p pwd ppp10"
|
|
echo ""
|
echo "Copyright (C) 2011 GuoWenxue <guowenxue@gmail.com>"
|
exit
|
}
|
|
#===============================
|
# Global variable declare =
|
#===============================
|
modem=
|
inf=
|
apn=
|
uid=
|
pwd=
|
|
|
# Configure file
|
if [ -z "$network_cfg_dir" ]; then
|
export network_cfg_dir=/apps/etc/network
|
fi
|
|
#===============================
|
# Shell body start here =
|
#===============================
|
|
if [ $# -lt 1 ] ; then
|
usage;
|
elif [ $# -eq 1 ] ; then
|
inf=$1
|
conf=ifcfg-$inf
|
|
cd $network_cfg_dir
|
|
if [ ! -f $conf ]; then
|
echo "================================================================================="
|
echo "ERROR: $inf dial up configure file \"$network_cfg_dir/$conf\" not found!"
|
echo "================================================================================="
|
echo ""
|
usage;
|
exit;
|
fi
|
|
. $conf
|
modem=$MODEM
|
apn=$APN
|
uid=$USERNAME
|
pwd=$PASSWORD
|
vrfy=$VERIFY
|
ipaddr=$IPADDR
|
cd -
|
else
|
while getopts "a:d:u:p:v:hi:" Option
|
do
|
case $Option in
|
d) modem=$OPTARG ;;
|
i) ipaddr=$OPTARG ;;
|
a) apn=$OPTARG ;;
|
u) uid=$OPTARG ;;
|
p) pwd=$OPTARG ;;
|
v) vrfy=$OPTARG ;;
|
h) pwd=$OPTARG; usage ;;
|
esac
|
done
|
shift $(($OPTIND - 1))
|
inf=$*
|
fi
|
|
if [ -z "$modem" ] ; then
|
usage;
|
exit;
|
fi
|
|
if [ ! -c "$modem" ] ; then
|
echo "ERROR: Modem device $modem doesn't exist!"
|
exit
|
fi
|
|
inf=$( echo $inf | tr -cd '[0-9]\n' )
|
|
|
# Chat script need these two variable
|
export APN=$apn
|
export DIALNUM="*99***1#"
|
chat_script="/etc/ppp/gprs-chat"
|
|
#======================
|
# The pppd options #
|
#======================
|
|
options="$modem 115200"
|
|
if [ -n "$uid" -a -n "pwd" ]; then
|
options=$options" name $uid"
|
options=$options" password $pwd"
|
fi
|
|
if [ -n "$inf" ] ; then
|
options=$options" unit $inf"
|
fi
|
|
if [ "$vrfy" == "chap" ] ; then
|
options=$options" require-chap"
|
else
|
options=$options" require-pap"
|
fi
|
|
# Restart after idle X second
|
options=$options" idle 86400"
|
|
options=$options" refuse-mschap refuse-mschap-v2 refuse-eap"
|
|
options=$options" nodefaultroute updetach"
|
options=$options" debug"
|
|
options=$options" lcp-echo-failure 3 lcp-echo-interval 5"
|
options=$options" ipcp-accept-local ipcp-accept-remote ipcp-restart 50"
|
|
options=$options" modem crtscts"
|
|
|
if [ -n "$ipaddr" ] ; then
|
options=$options" $ipaddr"
|
fi
|
|
# Let the phone figure out all the IP addresses
|
options=$options" noipdefault"
|
|
options=$options" noauth"
|
|
# No ppp compression
|
options=$options" novj noccp novjccomp"
|
|
# For sanity, keep a lock on the serial line
|
options=$options" lock"
|
|
#=================================
|
# PPP dial up command start up #
|
#=================================
|
set -x
|
|
#chat option should can be: -v -E -V -f
|
pppd $options connect "/usr/sbin/chat -v -E -f $chat_script"
|
|
if [ -d /sys/class/net/ppp$inf ] ; then
|
ip route add default dev ppp$inf metric 10
|
#ip route add default dev ppp$inf
|
/apps/tools/gatewayD > /dev/null 2>&1
|
fi
|