1aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger#!/bin/bash
2aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger#
3aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger# dhclient-script for Linux.
4aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger#
5aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger#		This program is free software; you can redistribute it and/or
6aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger#		modify it under the terms of the GNU General Public License
7aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger#		as published by the Free Software Foundation; either version
8aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger#		2 of the License, or (at your option) any later version.
9aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger#
10aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger# Authors:	Alexey Kuznetsov, <kuznet@ms2.inr.ac.ru>
11aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger#
12aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger# Probably, I did not understand, what this funny feature as "alias"
13aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger# means exactly. For now I suppose, that it is a static address, which
14aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger# we should install and preserve.
15aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger#
16aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger
1720ed7b24df05eadf83168d1d0ce0052a31380928Stephen Hemmingerexec >> /var/log/DHS.log 2>&1
18aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger
19aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemmingerecho dhc-script $* reason=$reason
20aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemmingerset | grep "^\(old_\|new_\|check_\)"
21aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger
22aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemmingerLOG () {
23aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger    echo LOG $* ;
24aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger}
25aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger
26aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger# convert 8bit mask to length
27aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger# arg: $1 = mask
28aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger#
29aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemmingerMask8ToLen() {
30aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger	local l=0;
31aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger
32aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger	while [ $l -le 7 ]; do
33aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger		if [ $[ ( 1 << $l ) + $1 ] -eq 256 ]; then
34aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger			return	$[ 8 - $l ]
35aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger		fi
36aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger		l=$[ $l + 1 ]
37aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger	done
38aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger	return 0;
39aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger}
40aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger
41aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger# convert inet dotted quad mask to length
42aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger# arg: $1 = dotquad mask
43aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger#
44aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemmingerMaskToLen() {
45aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger local masklen=0
46aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger local mask8=$1
47aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger
48aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger case $1 in
49aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger 0.0.0.0)
50aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger	return 0;
51aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger	;;
52aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger 255.*.0.0)
53aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger	masklen=8
54aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger	mask8=${mask8#255.}
55aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger	mask8=${mask8%.0.0}
56aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger	;;
57aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger 255.255.*.0)
58aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger	masklen=16
59aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger	mask8=${mask8#255.255.}
60aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger	mask8=${mask8%.0}
61aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger	;;
62aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger 255.255.255.*)
63aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger	masklen=24
64aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger	mask8=${mask8#255.255.255.}
65aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger	;;
66aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger *)
67aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger	return 255
68aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger	;;
69aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger esac
70aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger Mask8ToLen $mask8
71aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger return $[ $? + $masklen ]
72aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger}
73aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger
74aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger# calculate ABC "natural" mask
75aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger# arg: $1 = dotquad address
76aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger#
77aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemmingerABCMask () {
78aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger local class;
79aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger
80aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger class=${1%%.*}
81aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger
82aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger if [ "$1" = "255.255.255.255" ]; then
83aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger    echo $1
84aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger elif [ "$1" = "0.0.0.0" ]; then
85aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger    echo $1
86aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger elif [ $class -ge 224 ]; then
87aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger    echo 240.0.0.0
88aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger elif [ $class -ge 192 ]; then
89aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger    echo 255.255.255.0
90aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger elif [ $class -ge 128 ]; then
91aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger    echo 255.255.0.0
92aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger else
93aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger    echo 255.0.0.0
94aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger fi
95aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger}
96aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger
97aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger# calculate ABC "natural" mask length
98aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger# arg: $1 = dotquad address
99aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger#
100aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemmingerABCMaskLen () {
101aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger local class;
102aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger
103aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger class=${1%%.*}
104aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger
105aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger if [ "$1" = "255.255.255.255" ]; then
106aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger    return 32
107aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger elif [ "$1" = "0.0.0.0" ]; then
108aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger    return 0
109aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger elif [ $class -ge 224 ]; then
110aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger    return 4;
111aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger elif [ $class -ge 192 ]; then
112aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger    return 24;
113aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger elif [ $class -ge 128 ]; then
114aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger    return 16;
115aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger else
116aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger    return 8;
117aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger fi
118aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger}
119aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger
120aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger# Delete IP address
121aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger# args: $1 = interface
122aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger#       $2 = address
123aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger#       $3 = mask
124aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger#       $4 = broadcast
125aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger#       $5 = label
126aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger#
127aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemmingerDelINETAddr () {
128aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger  local masklen=32
129aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger  local addrid=$1
130aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger
131aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger  LOG DelINETAddr $*
132aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger
133aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger  if [ "$5" ]; then
134aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger    addrid=$addrid:$5
135aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger  fi
136aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger  LOG ifconfig $addrid down
137aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger  ifconfig $addrid down
138aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger}
139aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger
140aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger# Add IP address
141aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger# args: $1 = interface
142aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger#       $2 = address
143aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger#       $3 = mask
144aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger#       $4 = broadcast
145aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger#       $5 = label
146aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger#
147aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemmingerAddINETAddr () {
148aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger  local mask_arg
149aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger  local brd_arg
150aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger  local addrid=$1
151aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger
152aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger  LOG AddINETAddr $*
153aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger
154aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger  if [ "$5" ]; then
155aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger    addrid=$addrid:$5
156aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger  fi
157aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger  if [ "$3" ]; then
158aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger    mask_arg="netmask $3"
159aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger  fi
160aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger  if [ "$4" ]; then
161aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger    brd_arg="broadcast $4"
162aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger  fi
163aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger
164aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger  LOG ifconfig $addrid $2 $mask_arg $brd_arg up
165aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger  ifconfig $addrid $2 $mask_arg $brd_arg up
166aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger}
167aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger
168aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger# Add default routes
169aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger# args: $1 = routers list
170aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger#
171aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemmingerAddDefaultRoutes() {
172aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger    local router
173aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger
174aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger    if [ "$1" ]; then
175aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger      LOG AddDefaultRoutes $*
176aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger      for router in $1; do
177aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger        LOG route add default gw $router
178aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger        route add default gw $router
179aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger      done ;
180aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger    fi
181aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger}
182aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger
183aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger# Delete default routes
184aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger# args: $1 = routers list
185aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger#
186aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemmingerDelDefaultRoutes() {
187aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger    local router
188aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger
189aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger    if [ "$1" ]; then
190aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger      LOG DelDefaultRoutes $*
191aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger
192aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger      for router in $1; do
193aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger        LOG route del default gw $router
194aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger        route del default gw $router
195aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger      done
196aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger    fi
197aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger}
198aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger
199aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger# ping a host
200aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger# args: $1 = dotquad address of the host
201aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger#
202aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemmingerPingNode() {
203aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger    LOG PingNode $*
204aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger    if ping -q -c 1 -w 2 $1 ; then
205aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger	return 0;
206aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger    fi
207aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger    return 1;
208aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger}
209aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger
210aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger# Check (and add route, if alive) default routers
211aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger# args: $1 = routers list
212aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger# returns: 0 if at least one router is alive.
213aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger#
214aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemmingerCheckRouterList() {
215aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger    local router
216aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger    local succeed=1
217aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger
218aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger    LOG CheckRouterList $*
219aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger
220aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger    for router in $1; do
221aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger      if PingNode $router ; then
222aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger	succeed=0
223aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger        route add default gw $router
224aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger      fi
225aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger    done
226aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger    return $succeed
227aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger}
228aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger
229aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger# Delete/create static routes.
230aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger# args: $1 = operation (del/add)
231aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger#       $2 = routes list in format "dst1 nexthop1 dst2 ..."
232aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger#
233aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger# BEWARE: this feature of DHCP is obsolete, because does not
234aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger#         support subnetting.
235aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger#
236aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemmingerX-StaticRouteList() {
237aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger    local op=$1
238aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger    local lst="$2"
239aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger    local masklen
240aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger
241aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger    LOG X-StaticRouteList $*
242aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger
243aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger    if [ "$lst" ]; then
244aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger      set $lst
245aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger      while [ $# -gt 1 ]; do
246aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger	route $op -net $1 netmask `ABCMask "$1"` gw $2
247aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger	shift; shift;
248aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger      done
249aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger   fi
250aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger}
251aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger
252aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger# Create static routes.
253aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger# arg: $1 = routes list in format "dst1 nexthop1 dst2 ..."
254aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger#
255aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemmingerAddStaticRouteList() {
256aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger    LOG AddStaticRouteList $*
257aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger    X-StaticRouteList add "$1"
258aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger}
259aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger
260aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger# Delete static routes.
261aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger# arg: $1 = routes list in format "dst1 nexthop1 dst2 ..."
262aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger#
263aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemmingerDelStaticRouteList() {
264aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger    LOG DelStaticRouteList $*
265aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger    X-StaticRouteList del "$1"
266aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger}
267aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger
268aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger# Broadcast unsolicited ARP to update neighbours' caches.
269aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger# args: $1 = interface
270aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger#       $2 = address
271aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger#
272aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemmingerUnsolicitedARP() {
273aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger    if [ -f /sbin/arping ]; then
274aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger	/sbin/arping -A -c 1 -I "$1" "$2" &
275aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger	(sleep 2 ; /sbin/arping -U -c 1 -I "$1" "$2" ) &
276aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger    fi
277aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger}
278aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger
279aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger# Duplicate address detection.
280aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger# args: $1 = interface
281aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger#       $2 = test address
282aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger# returns: 0, if DAD succeeded.
283aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemmingerDAD() {
284aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger  if [ -f /sbin/arping ]; then
285aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger	/sbin/arping -c 2 -w 3 -D -I "$1" "$2"
286aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger	return $?
287aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger  fi
288aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger  return 0
289aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger}
290aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger
291aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger
292aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger# Setup resolver.
293aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger# args: NO
294aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger#       domain and nameserver list are passed in global variables.
295aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger#
296aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger# NOTE: we try to be careful and not to break user supplied resolv.conf.
297aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger#       The script mangles it, only if it has dhcp magic signature.
298aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger#
299aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemmingerUpdateDNS() {
300aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger    local nameserver
301aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger    local idstring="#### Generated by DHCPCD"
302aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger
303aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger    LOG UpdateDNS $*
304aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger
305aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger    if [ "$new_domain_name" = "" -a "$new_domain_name_servers" = "" ]; then
306aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger	return 0;
307aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger    fi
308aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger
309aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger    echo $idstring > /etc/resolv.conf.dhcp
310aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger    if [ "$new_domain_name" ]; then
311aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger	echo search $new_domain_name >> /etc/resolv.conf.dhcp
312aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger    fi
313aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger    echo options ndots:1 >> /etc/resolv.conf.dhcp
314aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger
315aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger    if [ "$new_domain_name_servers" ]; then
316aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger	for nameserver in $new_domain_name_servers; do
317aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger	    echo nameserver $nameserver >> /etc/resolv.conf.dhcp
318aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger	done
319aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger    else
320aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger	echo nameserver 127.0.0.1 >> /etc/resolv.conf.dhcp
321aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger    fi
322aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger
323aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger    if [ -f /etc/resolv.conf ]; then
324aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger	if [ "`head -1 /etc/resolv.conf`" != "$idstring" ]; then
325aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger	    return 0
326aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger	fi
327aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger	if [ "$old_domain_name" = "$new_domain_name" -a
328aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger	     "$new_domain_name_servers" = "$old_domain_name_servers" ]; then
329aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger	     return 0
330aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger	fi
331aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger    fi
332aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger    mv /etc/resolv.conf.dhcp /etc/resolv.conf
333aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger}
334aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger
335aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemmingercase $reason in
336aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemmingerNBI)
337aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger  exit 1
338aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger  ;;
339aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger
340aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemmingerMEDIUM)
341aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger  exit 0
342aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger  ;;
343aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger
344aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemmingerPREINIT)
345aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger  ifconfig $interface:dhcp down
346aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger  ifconfig $interface:dhcp1 down
347aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger  if [ -d /proc/sys/net/ipv4/conf/$interface ]; then
348aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger    ifconfig $interface:dhcp 10.10.10.10 netmask 255.255.255.255
349aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger    ifconfig $interface:dhcp down
350aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger    if [ -d /proc/sys/net/ipv4/conf/$interface ]; then
351aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger	LOG The interface $interface already configured.
352aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger    fi
353aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger  fi
354aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger  ifconfig $interface:dhcp up
355aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger  exit 0
356aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger  ;;
357aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger
358aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemmingerARPSEND)
359aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger  exit 0
360aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger  ;;
361aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger
362aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemmingerARPCHECK)
363aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger  if DAD "$interface" "$check_ip_address" ; then
364aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger    exit 0
365aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger  fi
366aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger  exit 1
367aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger  ;;
368aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger
369aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemmingerBOUND|RENEW|REBIND|REBOOT)
370aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger  if [ "$old_ip_address" -a "$alias_ip_address" -a \
371aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger	"$alias_ip_address" != "$old_ip_address" ]; then
372aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger    DelINETAddr "$interface" "$alias_ip_address" "$alias_subnet_mask" "$alias_broadcast_address" dhcp1
373aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger  fi
374aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger  if [ "$old_ip_address" -a "$old_ip_address" != "$new_ip_address" ]; then
375aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger    DelINETAddr "$interface" "$old_ip_address" "$old_subnet_mask" "$old_broadcast_address" dhcp
376aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger    DelDefaultRoutes "$old_routers"
377aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger    DelStaticRouteList "$old_static_routes"
378aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger  fi
379aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger  if [ "$old_ip_address" = "" -o "$old_ip_address" != "$new_ip_address" -o \
380aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger       "$reason" = "BOUND" -o "$reason" = "REBOOT" ]; then
381aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger    AddINETAddr "$interface" "$new_ip_address" "$new_subnet_mask" "$new_broadcast_address" dhcp
382aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger    AddStaticRouteList "$new_static_routes"
383aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger    AddDefaultRoutes "$new_routers"
384aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger    UnsolicitedARP "$interface" "$new_ip_address"
385aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger  fi
386aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger  if [ "$new_ip_address" != "$alias_ip_address" -a "$alias_ip_address" ]; then
387aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger    AddINETAddr "$interface" "$alias_ip_address" "$alias_subnet_mask" "$alias_broadcast_address" dhcp1
388aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger  fi
389aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger  UpdateDNS
390aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger  exit 0
391aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger  ;;
392aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger
393aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemmingerEXPIRE|FAIL)
394aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger  if [ "$alias_ip_address" ]; then
395aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger    DelINETAddr "$interface" "$alias_ip_address" "$alias_subnet_mask" "$alias_broadcast_address" dhcp1
396aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger  fi
397aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger  if [ "$old_ip_address" ]; then
398aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger    DelINETAddr "$interface" "$old_ip_address" "$old_subnet_mask" "$old_broadcast_address" dhcp
399aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger    DelDefaultRoutes "$old_routers"
400aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger    DelStaticRouteList "$old_static_routes"
401aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger  fi
402aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger  if [ "$alias_ip_address" ]; then
403aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger    AddINETAddr "$interface" "$alias_ip_address" "$alias_subnet_mask" "$alias_broadcast_address" dhcp1
404aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger  fi
405aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger  exit 0
406aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger  ;;
407aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger
408aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemmingerTIMEOUT)
409aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger  if [ "$alias_ip_address" ]; then
410aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger    DelINETAddr "$interface" "$alias_ip_address" "$alias_subnet_mask" "$alias_broadcast_address" dhcp1
411aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger  fi
412aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger# Seems, <null address> means, that no more old leases found.
413aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger# Or does it mean bug in dhcpcd? 8) Fail for now.
414aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger  if [ "$new_ip_address" = "<null address>" ]; then
415aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger    if [ "$old_ip_address" ]; then
416aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger	DelINETAddr "$interface" "$old_ip_address" "$old_subnet_mask" "$old_broadcast_address" dhcp
417aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger    fi
418aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger    if [ "$alias_ip_address" ]; then
419aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger        AddINETAddr "$interface" "$alias_ip_address" "$alias_subnet_mask" "$alias_broadcast_address" dhcp1
420aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger    fi
421aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger    exit 1
422aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger  fi
423aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger  if DAD "$interface" "$new_ip_address" ; then
424aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger    AddINETAddr "$interface" "$new_ip_address" "$new_subnet_mask" "$new_broadcast_address" dhcp
425aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger    UnsolicitedARP "$interface" "$new_ip_address"
426aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger    if [ "$alias_ip_address" -a "$alias_ip_address" != "$new_ip_address" ]; then
427aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger      AddINETAddr "$interface" "$alias_ip_address" "$alias_subnet_mask" "$alias_broadcast_address" dhcp1
428aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger      UnsolicitedARP "$interface" "$alias_ip_address"
429aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger    fi
430aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger    if CheckRouterList "$new_routers" ; then
431aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger	AddStaticRouteList "$new_static_routes"
432aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger	UpdateDNS
433aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger	exit 0
434aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger    fi
435aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger  fi
436aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger  DelINETAddr "$interface" "$new_ip_address" "$new_subnet_mask" "$new_broadcast_address" dhcp
437aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger  DelDefaultRoutes "$old_routers"
438aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger  DelStaticRouteList "$old_static_routes"
439aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger  if [ "$alias_ip_address" ]; then
440aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger    AddINETAddr "$interface" "$alias_ip_address" "$alias_subnet_mask" "$alias_broadcast_address" dhcp1
441aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger  fi
442aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger  exit 1
443aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger  ;;
444aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemmingeresac
445aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger
446aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemmingerexit 0
447