#!/bin/sh

set -e

if [ "$METHOD" = loopback -o -z "$IF_TINC_NET" ]; then
	exit 0
fi

# Read options from /etc/default

[ -r /etc/default/tinc ] && . /etc/default/tinc

# Set process limits

setlimits() {
  while [ $# -gt 0 ]; do
    parm=$1 ; shift
    if [ -n "$1" -a "${1#-}" = "$1" ]; then
      value=$1 ; shift
      ulimit $parm $value
    else
      ulimit $parm
    fi
  done
}

test -n "$LIMITS" && setlimits $LIMITS

# Read options from /etc/network/interfaces

[ -n "$IF_TINC_CONFIG" ]          && EXTRA="$EXTRA -c $IF_TINC_CONFIG"
[ -n "$IF_TINC_DEBUG" ]           && EXTRA="$EXTRA -d$IF_TINC_DEBUG"
[ -n "$IF_TINC_MLOCK" ]           && EXTRA="$EXTRA --mlock"
[ -n "$IF_TINC_LOGFILE" ]         && EXTRA="$EXTRA --logfile=$IF_TINC_LOGFILE"
[ -n "$IF_TINC_PIDFILE" ]         && EXTRA="$EXTRA --pidfile=$IF_TINC_PIDFILE" || IF_TINC_PIDFILE=/var/run/tinc.$IF_TINC_NET.pid
[ -n "$IF_TINC_CHROOT" ]          && EXTRA="$EXTRA --chroot"
[ -n "$IF_TINC_USER" ]            && EXTRA="$EXTRA --user=$IF_TINC_USER"


# Start tinc daemon

/usr/sbin/tincd -n "$IF_TINC_NET" -o "Interface=$IFACE" $EXTRA

# Wait for it to come up properly

/bin/sleep 0.1
i=0;
while [ ! -f $IF_TINC_PIDFILE ] ; do
	if [ $i = '30' ] ; then
		echo 'Failed to start tinc daemon!'
		exit 1
	fi
	/bin/sleep 0.1
	i=$(($i+1))
done

while read pid rest < $IF_TINC_PIDFILE ; do
	if [ -e "/proc/$pid" ] ; then
		exit 0
	fi

	if [ $i = '30' ] ; then
		echo 'Failed to start tinc daemon!'
		exit 1
	fi
	/bin/sleep 0.1
	i=$(($i+1))
done

exit 0
