#!/usr/bin/perl

#
# there should be no /etc/ppp/options on either the server or the client.
#
#                                                   _________________
#                                                   nirva@ishiboo.com

$localip="199.79.133.241";    # first ip on net
$localmask="255.255.255.240"; # 16 ips
$remoteip="199.79.133.2";     # other end of link
$ssh="/usr/local/bin/ssh";
$pppd="/usr/sbin/pppd";
$sshuser="vpn";
$sshhost="199.79.133.32";

foreach $maj ("p".."s") { # adjust this to the ptys you have
    foreach $min ("0".."9", "a".."f") {
       &tryopen("$maj$min");
    }
}
die "Couldn't alloc pty\n";

sub tryopen
{
    local($d)=@_;

    if (open(PTY, "+>/dev/pty$d")) {
	$pid=fork;
	defined($pid) || die "can't fork";

	if ($pid) { #parent
	    open(STDIN, "<&PTY") || die "reopen stdin";
	    open(STDOUT, ">&PTY") || die "reopen stout";
	    close PTY;
	    print STDERR "running on tty$d; ssh=$$, pppd=$pid\n";
	    #system $ssh, "-vt", "-l$sshuser", "vpn", "sudo /sbin/route delete $localip";
	    exec $ssh, "-x", "-t", "-l$sshuser", $sshhost, \
		    "sudo /usr/sbin/pppd passive debug";
	    die "exec $ssh: $!";

	} else { #child
	    close PTY;
	    sleep 5;
	    print "starting pppd\n";
	    exec $pppd, "/dev/tty$d", "defaultroute", "local", "debug", \
	    	"netmask", $localmask, "$localip:$remoteip";
	    die "exec $pppd: $!";
	}
    }
}
