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