| #!/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" | grep -w "$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 |