Move running dhclient on DHCP interfaces into a pre-mount hook.

Static interfaces are still configured on the fly as we add them, but
discussions on the mailing list have suggested that we need to have finer
control over bringing up dhcp interfaces.

The default hook just runs all the requested dhclients in parallel and waits
for them to all return.  If you need something more complicated than this, or
need to have more control over bringing interfaces up, you will probably need
to override some stuff in the 40network hook.
master
Victor Lowther 2009-02-25 18:42:11 -08:00 committed by Harald Hoyer
parent 6a376b57eb
commit 5f3e2dd2f3
5 changed files with 13 additions and 4 deletions

View File

@ -19,7 +19,9 @@ case $reason in
for s in $new_domain_name_servers; do
echo "nameserver $s" >> /etc/resolv.conf
done
set |grep -e '^new_[a-z_]=' >/net.$interface.dhcpopts
set |grep -e '^new_[a-z_]=' |while read line; do
echo "${line%%=*}=\'${line#*=}\'">>/net.$interface.dhcpopts
done
>/net.$interface.up ;;
*) ;;
esac

0
hooks/kill-dhclient.sh Normal file → Executable file
View File

7
hooks/run-dhclient.sh Executable file
View File

@ -0,0 +1,7 @@
#!/bin/sh
for i in /net.*.dhcp; do
dev=${i#net.}; dev=${i%.dhcp}
dhclient -1 -q $dev &
done
wait

5
ifup
View File

@ -1,5 +1,4 @@
#!/bin/sh
>/net.$1

# loopback is always handled the same way
[ "$1" = "lo" ] && {
@ -14,13 +13,13 @@ for p in $(cat /proc/cmdline); do
p=${p#ip=}
case $p in
none|off) exit 0;; # we were told to not configure anything
dhcp|on|any) dhclient -nw "$1"; exit 0;;
dhcp|on|any) >/net.$1.dhcp; exit 0;;
bootp|rarp|both) exit 0;; #dunno how to do this
*) echo ${ip#ip=} | \
(IFS=':' read client server gw netmask hostname device autoconf
if [ -z "$device" -o "$device" = "$1" ]; then
case $autoconf in
dhcp|on|any) dhclient -nw "$1";;
dhcp|on|any) >/net.$1.dhcp ;;
none|off|'') # do some basic configuration
ip link set $1 up
ip addr add $client/$netmask dev $1

View File

@ -5,3 +5,4 @@ inst "$dsrc/dhclient-script" "/sbin/dhclient-script"
instmods =networking ecb arc4
inst_rules "$dsrc/rules.d/60-net.rules"
inst_hook pre-pivot 10 "$dsrc/hooks/kill-dhclient.sh"
inst_hook pre-mount 70 "$dsrc/hooks/run-dhclient.sh"