diff options
author | Laine Stump <laine@redhat.com> | 2014-11-11 14:13:22 -0500 |
---|---|---|
committer | Lukas Nykryn <lnykryn@redhat.com> | 2014-11-12 12:49:56 +0100 |
commit | 6708502ce8724feb143e5a97af43687cec901c99 (patch) | |
tree | 6d8dfc515e426e3d3e5187c29b69d4c3ac0ad80a | |
parent | b14672c8a50e44e80a49b6982cbb4a38ef17a62c (diff) | |
download | initscripts-6708502ce8724feb143e5a97af43687cec901c99.tar initscripts-6708502ce8724feb143e5a97af43687cec901c99.tar.gz initscripts-6708502ce8724feb143e5a97af43687cec901c99.tar.bz2 initscripts-6708502ce8724feb143e5a97af43687cec901c99.tar.xz initscripts-6708502ce8724feb143e5a97af43687cec901c99.zip |
adjust LINKDELAY when STP is on
This resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1162822
When ifup is called on an interface that has BOOTPROTO=dhcp, ifup-eth
will call network-functions:check_link_down() to wait for carrier on
the interface before starting dhclient. If the interface happens to be
a bridge device, carrier will not come on until at least one attached
device is in "forwarding" mode. If the bridge has STP enabled, it
takes at least $DELAY * 2 + 5 seconds (sometimes slightly longer) for
any attached device to go into forwarding mode.
However, check_link_down() will only wait for max(${LINKDELAY}, 5)
seconds for carrier, and there are *many* existing configs that have
STP enabled but no setting for LINKDELAY. Every one of those configs
will now fail to ifup the bridge device.
The solution implemented in this patch is for ifup-eth to set
LINKDELAY to at least ${DELAY} * 2 + 7 when the device is a bridge an
STP is enabled. Since check_link_down() returns within .5 sec of
carrier coming up, the worst effect this could have would be to take
longer to fail in the case of a config where carrier was *never* going
to come up. Otherwise, it will not create any more delay than is
already present in cases that currently work, and will cause many
other configs to become unbroken.
-rwxr-xr-x | sysconfig/network-scripts/ifup-eth | 11 |
1 files changed, 10 insertions, 1 deletions
diff --git a/sysconfig/network-scripts/ifup-eth b/sysconfig/network-scripts/ifup-eth index c8154dc6..1ee026bd 100755 --- a/sysconfig/network-scripts/ifup-eth +++ b/sysconfig/network-scripts/ifup-eth @@ -1,6 +1,6 @@ #!/bin/bash # Network Interface Configuration System -# Copyright (c) 1996-2010 Red Hat, Inc. all rights reserved. +# Copyright (c) 1996-2014 Red Hat, Inc. all rights reserved. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License, version 2, @@ -64,6 +64,15 @@ if [ "${TYPE}" = "Bridge" ]; then value=${arg##*=}; echo $value > /sys/class/net/${DEVICE}/bridge/$key done + # set LINKDELAY (used as timeout when calling check_link_down()) + # to at least (${DELAY} * 2) + 7 if STP is enabled. This is the + # minimum time required for /sys/class/net/$REALDEVICE/carrier to + # become 1 after "ip link set dev $DEVICE up" is called. + if [ "${STP}" = "yes" -o "${STP}" = "on" ]; then + TMPD=7 + [ -n "${DELAY}" ] && TMPD=$(expr ${DELAY} \* 2 + ${TMPD}) + [ 0$LINKDELAY -lt $TMPD ] && LINKDELAY=$TMPD + fi fi # Create tap device. |