#!/bin/sh

# This file is part of avahi.
#
# avahi is free software; you can redistribute it and/or modify it
# under the terms of the GNU Lesser General Public License as
# published by the Free Software Foundation; either version 2 of the
# License, or (at your option) any later version.
#
# avahi is distributed in the hope that it will be useful, but WITHOUT
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
# License for more details.
#
# You should have received a copy of the GNU Lesser General Public
# License along with avahi; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
# USA.

set -e

# Command line arguments:
#   $1 event that happened:
#          BIND:     Successfully claimed address
#          CONFLICT: An IP address conflict happened
#          UNBIND:   The IP address is no longer needed
#          STOP:     The daemon is terminating
#   $2 interface name
#   $3 IP adddress

PATH="$PATH:/usr/bin:/usr/sbin:/bin:/sbin"

# Use a different metric for each interface, so that we can set
# identical routes to multiple interfaces.

METRIC=$((1000 + `cat "/sys/class/net/$2/ifindex" 2>/dev/null || echo 0`))

if [ -x /bin/ip -o -x /sbin/ip ] ; then

    # We have the Linux ip tool from the iproute package

    case "$1" in
        BIND)
            ip addr add "$3"/16 brd 169.254.255.255 label "$2:avahi" scope link dev "$2"
            ip route add default dev "$2" metric "$METRIC" scope link ||:
            ;;

        CONFLICT|UNBIND|STOP)
            ip route del default dev "$2" metric "$METRIC" scope link ||:
            ip addr del "$3"/16 brd 169.254.255.255 label "$2:avahi" scope link dev "$2"
            ;;

        *)
            echo "Unknown event $1" >&2
            exit 1
            ;;
    esac

elif [ -x /bin/ifconfig -o -x /sbin/ifconfig ] ; then

    # We have the old ifconfig tool

    case "$1" in
        BIND)
            ifconfig "$2:avahi" inet "$3" netmask 255.255.0.0 broadcast 169.254.255.255 up
            route add default dev "$2:avahi" metric "$METRIC" ||:
            ;;

        CONFLICT|STOP|UNBIND)
            route del default dev "$2:avahi" metric "$METRIC" ||:
            ifconfig "$2:avahi" down
            ;;

        *)
            echo "Unknown event $1" >&2
            exit 1
            ;;
    esac

else

    echo "No network configuration tool found." >&2
    exit 1

fi

exit 0
