#!/bin/bash
# -*- indent-tabs-mode: nil; tab-width: 4; -*-
# vim: set expandtab tabstop=4:

lockdir=/tmp/ppp_route_change.lock
GOTLOCK=0
while [ $GOTLOCK -eq 0 ]; do
    if mkdir "$lockdir"
    then
        trap 'rm -rf "$lockdir"' 0
        exec >> /var/log/ppp/ipupdown.log 2>&1
        GOTLOCK=1
    fi
done

echo "$PPP_IFACE on $PPP_TTY DOWN at $(date -u -Ins) local $PPP_LOCAL remote $PPP_REMOTE"

if [ -f /etc/ppp/network.config ]; then
  . /etc/ppp/network.config
fi
AIRCRAFT_NETWORK=${AIRCRAFT_NETWORK:-"10.1.1.0/24"}

DONE=0
while [ $DONE -eq 0 ]; do
    INTERFACES=($(ip -o link show | grep ppp | grep -v 'state DOWN'| awk '{print $2}' | sed 's/.$//'))
    ROUTE_EXISTS=$(ip route show | grep ${AIRCRAFT_NETWORK})

    if ! [ "$ROUTE_EXISTS" == "" ]
    then
        ROUTE_COMMAND="ip route change ${AIRCRAFT_NETWORK} scope global "
    else
        ROUTE_COMMAND="ip route add ${AIRCRAFT_NETWORK} scope global "
    fi

    for i in "${INTERFACES[@]}"
    do
        if [ "$i" != "$PPP_IFACE" ]
        then
            ROUTE_COMMAND="$ROUTE_COMMAND nexthop dev $i weight 1 "
        fi
    done

    if [ "$ROUTE_COMMAND" == "ip route change ${AIRCRAFT_NETWORK} scope global " ]
    then
        ROUTE_COMMAND="ip route del ${AIRCRAFT_NETWORK} "
    fi

    if [ "$ROUTE_COMMAND" == "ip route add ${AIRCRAFT_NETWORK} scope global " ]
    then
        ROUTE_COMMAND=""
    fi

    if ! [ "$ROUTE_COMMAND" == "" ]
    then
        $ROUTE_COMMAND
        if [ $? -eq 0 ]
        then
            VALUE=${#INTERFACES[@]}
            VALUE2=$((VALUE*2800))
            tc qdisc change dev tun0 root tbf rate $VALUE2 limit 1500 burst 1504
            if [ $? -eq 0 ]
            then
                DONE=1
            fi
        fi
    else
        DONE=1
    fi
done

exit 0

