aboutsummaryrefslogtreecommitdiffstats
path: root/sysconfig
diff options
context:
space:
mode:
authorLaine Stump <laine@redhat.com>2014-11-11 14:13:22 -0500
committerLukas Nykryn <lnykryn@redhat.com>2014-11-12 13:28:55 +0100
commit3d5a5a8204d1279a5672410af58e3cfebfae7c2f (patch)
tree17bf603e588dddcba11a132b962a62194a7d612e /sysconfig
parent9d653738198c83e28a8a0f454a5eb333709e0747 (diff)
downloadinitscripts-3d5a5a8204d1279a5672410af58e3cfebfae7c2f.tar
initscripts-3d5a5a8204d1279a5672410af58e3cfebfae7c2f.tar.gz
initscripts-3d5a5a8204d1279a5672410af58e3cfebfae7c2f.tar.bz2
initscripts-3d5a5a8204d1279a5672410af58e3cfebfae7c2f.tar.xz
initscripts-3d5a5a8204d1279a5672410af58e3cfebfae7c2f.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.
Diffstat (limited to 'sysconfig')
-rwxr-xr-xsysconfig/network-scripts/ifup-eth11
1 files changed, 10 insertions, 1 deletions
diff --git a/sysconfig/network-scripts/ifup-eth b/sysconfig/network-scripts/ifup-eth
index 8c2f90fd..24a6f4b0 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.