[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: ppp's ip-{up,down} and possible utilization of 'run-parts'



"Adam P. Harris" <apharris@onshore.com> writes:

> 
> 
> Maybe I should submit this as a wishlist to the bug system, but I was
> interested in getting some comments first.
> 
> I think that /etc/ppp/ip-up and /etc/ppp/ip-down should use
> 'run-parts' against, say, the directories /etc/ppp/ip-{up,down}.d/.
> 
> This would allow, for instance, MTA packages to ship little scripts to
> flush the mail queue when the link comes up, pop-deamons to start up,
> bind to reload, clock sync daemons to re-sync, firewall and
> masquerading rules to run, and dynamic PPP hosts to update some file
> on some server indicating their current IP.

Well, the recent discussion of using run-parts in ip-up and ip-down
finally convinced me to doing a little cleaning up of my hacked
together system.  I've basically implemented what Adam Harris was
asking for, together with a HTML form, so that my wife can control our
expensive (UK) modem link from her Windows 95 box.

I'll launch straight into the scripts and describe as I go along.

Here's my ip-up script...

======================== /etc/ppp/ip-up ===========================
#!/bin/sh
#
# This script is run by the pppd after the link is established.
# It should be used to add routes, set IP address, run the mailq
# etc.
#
# This script is called with the following arguments:
#    Arg  Name               Example
#    $1   Interface name     ppp0
#    $2   The tty            ttyS1
#    $3   The link speed     38400
#    $4   Local IP number    12.34.56.78
#    $5   Peer  IP number    12.34.56.99
#    $6   Something passed with the 'ipparam' option for pppd

# Save the options for possible later use
INTERFACE=$1
TTY=$2
SPEED=$3
LOCAL_IP=$4
PEER_IP=$5

# Set up the runtime flag directory
RUNDIR=/var/run/ppp

# Set defaults
FLASH=/bin/false

# Parse the flags
# Note that $6 is not protected in quotes here, so to break it up into
# fields again.
set $6
while [ "$1" != "" ]
do
	case "$1" in
		flash)		FLASH=/bin/true ;;
		"get-mail") 	touch $RUNDIR/get-mail ;;
		"send-mail") 	touch $RUNDIR/send-mail ;;
		"get-news")	touch $RUNDIR/get-news ;;
		"get-www")	touch $RUNDIR/get-www ;;
	esac
	shift
done

# Do all the things we want to when we're connected
/bin/run-parts /etc/ppp/ip-up.d

# If it's a flash session, wait until all done, then kill link.
if $FLASH
then
	while [ "`/bin/ls $RUNDIR`" != "" ]
	do
		sleep 5
	done
	killall -TERM pppd
fi
	
exit 0
	
# End of file.
======================== EOF /etc/ppp/ip-up ========================

It is important that pppd is called in a statement in the form

pppd ipparam "flash get-news get-mail"

Notice the quoting around the argument.  It is there since only one
argument gets passed to the ip-up script, not the rest of the command
line.

Each of the lines in the case statement correspond to a script in the
/etc/ppp/ip-up.d/ directory, apart from the FLASH check.  I've
borrowed the 'flash session' name from AOL (hope it's not
trademarked!)  The flags to `pppd ipparam [flags]` pass on the
information as to which services to run in this ppp session.  Each
required service results in a flag file being touched in /var/run/ppp,
and the scripts check for this flag.

There are two types of script in ip-up.d. These which we always want
to run (bind, masq, etc) and those we only want to run on choice.

When a script is done, it removes the corresponding flag file.  The
ip-up script, if it's been called as a flash session loops until there
are no flag files left, and then brings the ppp link down.  Otherwise,
it exits gracefully, and awaits the user/admin to close the link when
they wish to.

Here's my getnews script...

==================== /etc/ppp/ip-up.d/50getnews ====================
#!/bin/sh

# This script will exchange news with the outside world

FLAG=/var/run/ppp/get-news

if [ -f $FLAG ]
then
  if [ -x /usr/sbin/get-news ] ; then
    ( \
      if [ -x /usr/bin/logger ] ; then \
        /usr/bin/logger -t get-news -p news.info "Starting to get news..."; \
      fi ; \
      /usr/sbin/get-news ; \
      /bin/rm -f $FLAG ; \
      if [ -x /usr/bin/logger ] ; then \
        /usr/bin/logger -t get-news -p news.info "Finished getting news."; \
      fi ; \
    ) &
  else
    /bin/rm -f $FLAG
  fi
fi

exit 0

=================== EOF /etc/ppp/ip-up.d/50getnews ==================

So, it basically checks for the flag file set in ip-up script and runs
only if it's there.  There's a similar sequence of scripts in
ip-down.d which clean up the flags if any are left (modem lines do
die), and remove masquerading, reset bind for offline mode, etc.

Here's the whole tree of scripts.  Feel free to criticise, alter,
and use freely.

begin 644 etc.ppp.tar.gz
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
#4```
`
end


--
TO UNSUBSCRIBE FROM THIS MAILING LIST: e-mail the word "unsubscribe" to
debian-devel-request@lists.debian.org . 
Trouble?  e-mail to templin@bucknell.edu .


Reply to: