#!/usr/local/bin/perl 

## Run from cron periodically 
##
##  If Slip Device Lock Exists
##		If file is over 3 hours old
##			Remove It
##			Issue A KillSlip
##
## Major purpose is to keep from hogging slip line and running up charges
##
## It should also do a netstat and monitor packet transmissions, and not
## kill the connection if some arbitrary threashold is exceeded.
##
## This could be tons smarter with minor effort ...coggs
##

$LockPath	= "/usr/spool/locks/LCK..";
$SlipDevice	= "cuab";
$DevLockFile	= "${LockPath}${SlipDevice}";

$SlipLock	= "slip";
$SlipLockFile	= "${LockPath}${SlipLock}";
$SlipIf		= "slip0";
$NetstatPipe	= "netstat -r -n | grep $SlipIf | grep default |";

$MaxDiff = 60 * 60 * 3;

$TouchCmd        = "/usr/bin/touch";
$TmStmpFile     = "${LockPath}ageslip";

$unlockslip	= "rm $SlipLockFile";
$killslip	= "/usr/local/bin/killslip";

 #
##
#
sub CheckModTime {

#  0     1    2     3      4    5    6     7     8      9      10     11      12
# $dev,$ino,$mode,$nlink,$uid,$gid,$rdev,$size,$atime,$mtime,$ctime,$blksize,$blocks

    @stinf = stat("$DevLockFile");
    $LockModTime = @stinf[9];

    @stinf = stat($TmStmpFile);
    $TmStmpModTime = @stinf[9];

    printf STDERR "LockTime: %d , TimeStamp: %d\n", $LockModTime, $TmStmpModTime;
    if (($TmStmpModTime - $LockModTime) > $MaxDiff) {

	system "$unlockslip";

	system "$killslip";
	
        printf STDERR "$DevLockFile not modified for $MaxDiff Seconds\n" ;
        exit(0);
    }

}

 #
## Main Procedure
##                   
##
#

system "$TouchCmd $TmStmpFile";

&CheckModTime();



