#!/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

