#!/bin/sh

logger "L2TP-Dialer: start"

while true
do

    while read lnsline; do

        ifname=`echo $lnsline | awk '{print $1}'`
        desc=`echo $lnsline | awk '{print $2}'`
        peer_ip=`echo $lnsline | awk '{print $3}'`

        /sbin/ifconfig $ifname > /dev/null 2>&1
        if [ $? = "0" ] ; then
            echo "$desc ok"
        else
            dial="no"
            if [ "$peer_ip" ]; then
                phase1_up=`/usr/sbin/racoonctl -l show-sa isakmp | grep -c $peer_ip`
                if [ "$phase1_up" -eq "0" ]; then
                    policy_count=`/usr/sbin/setkey -DP | grep -c $peer_ip`
                    logger "L2TP-Dialer: start phase 1 for $peer_ip, number of policies:$policy_count"
                    /usr/sbin/racoonctl vpn-connect $peer_ip
                    sleep 25
                    phase1_up_again=`/usr/sbin/racoonctl -l show-sa isakmp | grep -c $peer_ip`
                    if [ "$phase1_up_again" -eq "0" ]; then
                        logger "L2TP-Dialer: phase 1 failed with $peer_ip"
                    else
                        logger "L2TP-Dialer: phase 1 seems up with $peer_ip, ok to start dialing"
                        dial="yes"
                    fi
                else
                    logger "L2TP-Dialer: phase 1 up with $peer_ip, ok to start dialing"
                    dial="yes"
                fi
            else
                dial="yes"
            fi

            if [ "$dial" = "yes" ]; then
                echo "Disable:$desc"
                echo "d $desc" > $2
                sleep 1
                echo "Calling:$desc"
                echo "c $desc" > $2
            fi
        fi
    done < $1

    sleep 120
done

