#!/bin/sh . /lib/functions.sh . /lib/functions/network.sh PIDPATH=/var/run tunnel_id=0 missing() { logger -t td-client "Not starting tunneldigger \"$1\" - missing $2" >&2 } handle_td_ifup() { local cfg=$1 local enabled local addresses local uuid local interface local group local limit_bw_down local hook_script local bind_interface local broker_selection config_get_bool enabled "$cfg" enabled 1 config_get addresses "$cfg" address config_get uuid "$cfg" uuid config_get interface "$cfg" interface config_get group "$cfg" group config_get limit_bw_down "$cfg" limit_bw_down config_get hook_script "$cfg" hook_script config_get bind_interface "$cfg" bind_interface config_get broker_selection "$cfg" broker_selection let tunnel_id++ [ $enabled -eq 0 ] && return [ "$INTERFACE" != "${bind_interface}" ] && return local broker_opts="" local address for address in $addresses; do append broker_opts "-b ${address}" done [ ! -z "${limit_bw_down}" ] && append broker_opts "-L ${limit_bw_down}" [ ! -z "${hook_script}" ] && append broker_opts "-s ${hook_script}" [ ! -z "${bind_interface}" ] && { # Resolve logical interface name. unset _bind_interface network_get_device _bind_interface "${bind_interface}" || _bind_interface="${bind_interface}" append broker_opts "-I ${_bind_interface}" } [ ! -z "${broker_selection}" ] && { # Set broker selection. case "${broker_selection}" in usage) append broker_opts "-a" ;; first) append broker_opts "-g" ;; random) append broker_opts "-r" ;; esac } if [ -z "$uuid" ]; then missing $cfg uuid return elif [ -z "$interface" ]; then missing $cfg interface return fi logger -t td-client "Starting tunneldigger \"$cfg\" on ${interface}" /sbin/start-stop-daemon -S -q -b -m -c root:${group} -p ${PIDPATH}/tunneldigger.${interface}.pid -x /usr/bin/tunneldigger -- -u ${uuid} -i ${interface} -t ${tunnel_id} ${broker_opts} } handle_td_ifdown() { local cfg=$1 local enabled local interface local bind_interface config_get_bool enabled "$cfg" enabled 1 config_get interface "$cfg" interface config_get bind_interface "$cfg" bind_interface if [ "$INTERFACE" = "${bind_interface}" ]; then local PIDFILE=${PIDPATH}/tunneldigger.${interface}.pid local PID="$(cat ${PIDFILE})" logger -t td-client "Stopping tunneldigger \"$cfg\" on ${interface} PIDFILE=${PIDFILE}" /sbin/start-stop-daemon -K -q -p $PIDFILE while test -d "/proc/${PID}"; do logger -t td-client " waiting for tunneldigger to stop" sleep 1 done logger -t td-client " tunneldigger stopped" fi } config_load tunneldigger if [ "$ACTION" = ifup ]; then config_foreach handle_td_ifup broker fi if [ "$ACTION" = ifdown ]; then config_foreach handle_td_ifdown broker fi