Custom Scripts

Team-Fly    

Solaris™ Operating Environment Boot Camp
By David Rhodes, Dominic Butler
Table of Contents
Chapter 15.  Dialing in with PPP


We now have an interface that will connect into the ISP automatically and hang up after a predefined time period. This is great, although some users prefer to control the dialup and timeout processes themselves. To do this, we'll create a few short scripts: startPPP to initialize the connection and keep it open, and stopPPP to terminate the link.

Let's first look at how we start it:

 cesium# cat startPPP #!/bin/ksh # # script to initiate the PPP link # remoteMachine="remote-ppp"  # the remote entry in hosts sleepTimer=250              # must be less than ppp timeout pidFile=/tmp/startPPP.pid # # check PPP is not already running # if [ -f ${pidFile} ]; then   thePid=$(cat ${pidFile})   pidStat=$(ps p ${thePid} | grep v PID | wc l | awk '{ print $1 }')   if [ ${pidStat} gt 0 ]; then        echo "Error: startPid is  already running"     exit 1   else     rm ${pidFile}   fi fi # # start the ppp daemon # /etc/init.d/asppp start # # initiate the connection # ping ${remoteMachine} > /dev/null pingableMachine=$(grep nameserver /etc/resolv.conf | head -1 |    cut -d' ' -f 2) ping ${pingableMachine} 300 > /dev/null if [ $? ne 0 ]; then   echo "Error: Cannot connect to ${pingableMachine}"   exit 1 fi echo "$$" > ${pidFile} # # now keep it open by looping around indefinitely # while true; do   ping ${pingableMachine} 60 > /dev/null   sleep ${sleepTimer} done exit 0 cesium# 

To open the connection, startPPP first checks to see if PPP is already established. If not, it will ping the remote machine to establish the connection, then will loop around pinging another accessible machine every so often to ensure the PPP inactivity time-out is never met. It also writes its process ID to a file to easily allow us to find the process later to stop it.

We can see that we use two different addresses for ping to check. This is because of the dummy address problem, where we need to ping the dummy address to initiate the connection, but once it is made the dummy address is exchanged for the real address. We need to use an address we know is external to keep the connection alive. We have done this in the script by picking the first nameserver entry out of /etc/resolv.conf.

Now, let's look at how the connection is closed:

 cesium# cat stopPPP #!/bin/ksh # # script to stop the PPP connection # pidFile=/tmp/startPPP.pid if [ -f ${pidFile} ]; then   /etc/init.d/asppp stop   kill $(cat ${pidFile})   if [ $? eq 0 ]; then     echo "PPP connection terminated"     rm ${pidFile}   else     echo "Error: Cannot terminate the connection"     exit 1   fi else   echo "PPP is not connected"   exit 2 fi exit 0 cesium# 

To stop the process, the script checks for the existence of the file that contains the Process Identifier (PID) and, if there, stops the link manager. Next it kills off the ping process to the remote machine, and finally cleans up by removing the PID file.


    Team-Fly    
    Top
     



    Solaris Operating Environment Boot Camp
    Solaris Operating Environment Boot Camp
    ISBN: 0130342874
    EAN: 2147483647
    Year: 2002
    Pages: 301

    flylib.com © 2008-2017.
    If you may any questions please contact us: flylib@qtcs.net