1#!/bin/sh
2
3# This file is part of avahi.
4#
5# avahi is free software; you can redistribute it and/or modify it
6# under the terms of the GNU Lesser General Public License as
7# published by the Free Software Foundation; either version 2 of the
8# License, or (at your option) any later version.
9#
10# avahi is distributed in the hope that it will be useful, but WITHOUT
11# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
12# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
13# License for more details.
14#
15# You should have received a copy of the GNU Lesser General Public
16# License along with avahi; if not, write to the Free Software
17# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
18# USA.
19
20set -e
21
22# Command line arguments:
23#   $1 event that happened:
24#          BIND:     Successfully claimed address
25#          CONFLICT: An IP address conflict happened
26#          UNBIND:   The IP address is no longer needed
27#          STOP:     The daemon is terminating
28#   $2 interface name
29#   $3 IP adddress
30
31PATH="$PATH:/usr/bin:/usr/sbin:/bin:/sbin"
32
33# Use a different metric for each interface, so that we can set
34# identical routes to multiple interfaces.
35
36METRIC=$((1000 + `cat "/sys/class/net/$2/ifindex" 2>/dev/null || echo 0`))
37
38if [ -x /bin/ip -o -x /sbin/ip ] ; then
39
40    # We have the Linux ip tool from the iproute package
41
42    case "$1" in
43        BIND)
44            ip addr add "$3"/16 brd 169.254.255.255 label "$2:avahi" scope link dev "$2"
45            ip route add default dev "$2" metric "$METRIC" scope link ||:
46            ;;
47
48        CONFLICT|UNBIND|STOP)
49            ip route del default dev "$2" metric "$METRIC" scope link ||:
50            ip addr del "$3"/16 brd 169.254.255.255 label "$2:avahi" scope link dev "$2"
51            ;;
52
53        *)
54            echo "Unknown event $1" >&2
55            exit 1
56            ;;
57    esac
58
59elif [ -x /bin/ifconfig -o -x /sbin/ifconfig ] ; then
60
61    # We have the old ifconfig tool
62
63    case "$1" in
64        BIND)
65            ifconfig "$2:avahi" inet "$3" netmask 255.255.0.0 broadcast 169.254.255.255 up
66            route add default dev "$2:avahi" metric "$METRIC" ||:
67            ;;
68
69        CONFLICT|STOP|UNBIND)
70            route del default dev "$2:avahi" metric "$METRIC" ||:
71            ifconfig "$2:avahi" down
72            ;;
73
74        *)
75            echo "Unknown event $1" >&2
76            exit 1
77            ;;
78    esac
79
80else
81
82    echo "No network configuration tool found." >&2
83    exit 1
84
85fi
86
87exit 0
88