123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104 |
- #!/bin/sh
- # $Id: poff,v 1.1 2002/11/24 23:30:44 etbe Exp $
- # Written by John Hasler <john@dhh.gt.org> and based on work
- # by Phil Hands <phil@hands.com>. Distributed under the GNU GPL
- if [ -x /usr/bin/kill ]; then
- KILL="/usr/bin/kill"
- else
- KILL="/bin/kill"
- fi
- SIG=TERM
- DONE="stopped"
- MODE=""
- usage ()
- {
- cat <<!EOF!
- usage: $0 [option] [provider]
- options:
- -r Cause pppd to drop the line and redial.
- -d Toggle the state of pppd's debug option.
- -c Cause pppd to renegotiate compression.
- -a Stop all pppd's. 'provider' will be ignored.
- -h Print this help summary and exit.
- -v Print version and exit.
- none Stop pppd.
- Options may not be combined.
- If 'provider' is omitted pppd will be stopped or signalled if and only if
- there is exactly one running unless the '-a' option was given. If
- 'provider' is supplied the pppd controlling the connection to that
- provider will be stopped or signalled.
- !EOF!
- }
- # Get option. If there are none replace the "?" that getopts puts in
- # FLAG on error with "null".
- getopts rdcavh FLAG
- if [ "$?" -ne 0 ]; then
- FLAG="null"
- fi
- # Check for additional options. Should be none.
- getopts :rdcavh DUMMY
- if [ "$?" -eq 0 ]; then
- echo "$0: Illegal option -- ${OPTARG}."
- exit 1
- fi
- case $FLAG in
- "r") SIG=HUP; DONE=signalled; shift ;;
- "d") SIG=USR1; DONE=signalled; shift ;;
- "c") SIG=USR2; DONE=signalled; shift ;;
- "a") MODE="all"; shift ;;
- "v") echo "$0$Revision: 1.1 $_TrickToPrint_RCS_Revision"; exit 0 ;;
- "h") usage; exit 0 ;;
- "?") exit 1;
- esac
- # Get the PIDs of all the pppds running. Could also get these from
- # /var/run, but pppd doesn't create .pid files until ppp is up.
- PIDS=`pidof pppd`
- # poff is pointless if pppd isn't running.
- if test -z "$PIDS"; then
- echo "$0: No pppd is running. None ${DONE}."
- exit 1
- fi
- # Find out how many pppd's are running.
- N=`echo "$PIDS" | wc -w`
- # If there are no arguments we can't do anything if there is more than one
- # pppd running.
- if test "$#" -eq 0 -a "$N" -gt 1 -a $FLAG != "a" ; then
- echo "$0: More than one pppd running and no "-a" option and
- no arguments supplied. Nothing ${DONE}."
- exit 1
- fi
- # If either there are no arguments or '-a' was specified kill all the
- # pppd's.
- if test "$#" -eq 0 -o "$MODE" = "all" ; then
- $KILL -$SIG $PIDS || {
- echo "$0: $KILL failed. None ${DONE}."
- exit 1
- }
- exit 0
- fi
- # There is an argument, so kill the pppd started on that provider.
- PID=`ps axw | grep "[ /]pppd call $1" | awk '{print $1}'`
- if test -n "$PID" ; then
- $KILL -$SIG $PID || {
- echo "$0: $KILL failed. None ${DONE}."
- exit 1
- }
- else
- echo "$0: I could not find a pppd process for provider '$1'. None ${DONE}."
- exit 1
- fi
- exit 0
|