Browse Source

Wait for interface up at the early stage

In case long delay of network driver initqueue will exit before net dev is
ready. We have no chance to setup it then.
For dhcp, when we finish the setup there will be a setup_net_<dev>.ok. Doing
same for static ip case. Also add a check to initqueue when we generate udev
rules to ensure it's early enough.

[v1->v2]: only wait for bootdev or it's possible to cause boot fail for
waiting for non-bootdev. For example bond0->eth0, set bond0 as bootdev and
dhcp, we only need to wait bond0 setup ok.

Signed-off-by: Dave Young <dyoung@redhat.com>
master
dyoung@redhat.com 12 years ago committed by Harald Hoyer
parent
commit
3fa59d171d
  1. 1
      modules.d/40network/ifup.sh
  2. 9
      modules.d/40network/net-genrules.sh

1
modules.d/40network/ifup.sh

@ -118,6 +118,7 @@ do_static() {
[ -n "$gw" ] && echo ip route add default via $gw dev $netif > /tmp/net.$netif.gw [ -n "$gw" ] && echo ip route add default via $gw dev $netif > /tmp/net.$netif.gw
[ -n "$hostname" ] && echo "echo $hostname > /proc/sys/kernel/hostname" > /tmp/net.$netif.hostname [ -n "$hostname" ] && echo "echo $hostname > /proc/sys/kernel/hostname" > /tmp/net.$netif.hostname


> /tmp/setup_net_${netif}.ok
return 0 return 0
} }



9
modules.d/40network/net-genrules.sh

@ -48,6 +48,10 @@ fi
[ -e /tmp/net.ifaces ] && read IFACES < /tmp/net.ifaces [ -e /tmp/net.ifaces ] && read IFACES < /tmp/net.ifaces
fi fi


if [ -e /tmp/net.bootdev ]; then
bootdev=$(cat /tmp/net.bootdev)
fi

ifup='/sbin/ifup $env{INTERFACE}' ifup='/sbin/ifup $env{INTERFACE}'
[ -z "$netroot" ] && ifup="$ifup -m" [ -z "$netroot" ] && ifup="$ifup -m"


@ -56,14 +60,19 @@ fi
if [ -n "$BOOTIF" ] ; then if [ -n "$BOOTIF" ] ; then
BOOTIF=$(fix_bootif "$BOOTIF") BOOTIF=$(fix_bootif "$BOOTIF")
printf 'ACTION=="add", SUBSYSTEM=="net", ATTR{address}=="%s", RUN+="%s"\n' "$BOOTIF" "/sbin/initqueue --onetime $ifup" printf 'ACTION=="add", SUBSYSTEM=="net", ATTR{address}=="%s", RUN+="%s"\n' "$BOOTIF" "/sbin/initqueue --onetime $ifup"
echo "[ -f /tmp/setup_net_${BOOTIF}.ok ]" >$hookdir/initqueue/finished/wait-${BOOTIF}.sh


# If we have to handle multiple interfaces, handle only them. # If we have to handle multiple interfaces, handle only them.
elif [ -n "$IFACES" ] ; then elif [ -n "$IFACES" ] ; then
for iface in $IFACES ; do for iface in $IFACES ; do
printf 'SUBSYSTEM=="net", ENV{INTERFACE}=="%s", RUN+="%s"\n' "$iface" "/sbin/initqueue --onetime $ifup" printf 'SUBSYSTEM=="net", ENV{INTERFACE}=="%s", RUN+="%s"\n' "$iface" "/sbin/initqueue --onetime $ifup"
if [ "$bootdev" = "$iface" ]; then
echo "[ -f /tmp/setup_net_${iface}.ok ]" >$hookdir/initqueue/finished/wait-$iface.sh
fi
done done


# Default: We don't know the interface to use, handle all # Default: We don't know the interface to use, handle all
# Fixme: waiting for the interface as well.
else else
# if you change the name of "91-default-net.rules", also change modules.d/80cms/cmssetup.sh # if you change the name of "91-default-net.rules", also change modules.d/80cms/cmssetup.sh
printf 'SUBSYSTEM=="net", RUN+="%s"\n' "/sbin/initqueue --onetime $ifup" > /etc/udev/rules.d/91-default-net.rules printf 'SUBSYSTEM=="net", RUN+="%s"\n' "/sbin/initqueue --onetime $ifup" > /etc/udev/rules.d/91-default-net.rules

Loading…
Cancel
Save