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 flush dev "$2" label "$2:avahi"
45            ip addr add "$3"/16 brd 169.254.255.255 label "$2:avahi" scope link dev "$2"
46            ip route add default dev "$2" metric "$METRIC" scope link ||:
47            ;;
48
49        CONFLICT|UNBIND|STOP)
50            ip route del default dev "$2" metric "$METRIC" scope link ||:
51            ip addr del "$3"/16 brd 169.254.255.255 label "$2:avahi" scope link dev "$2"
52            ;;
53
54        *)
55            echo "Unknown event $1" >&2
56            exit 1
57            ;;
58    esac
59
60elif [ -x /bin/ifconfig -o -x /sbin/ifconfig ] ; then
61
62    # We have the old ifconfig tool
63
64    case "$1" in
65        BIND)
66            ifconfig "$2:avahi" inet "$3" netmask 255.255.0.0 broadcast 169.254.255.255 up
67            route add default dev "$2:avahi" metric "$METRIC" ||:
68            ;;
69
70        CONFLICT|STOP|UNBIND)
71            route del default dev "$2:avahi" metric "$METRIC" ||:
72            ifconfig "$2:avahi" down
73            ;;
74
75        *)
76            echo "Unknown event $1" >&2
77            exit 1
78            ;;
79    esac
80
81else
82
83    echo "No network configuration tool found." >&2
84    exit 1
85
86fi
87
88exit 0
89