--- network-bridge.orig 2005-12-11 20:23:16.000000000 +0800 +++ network-bridge 2005-12-11 20:34:47.000000000 +0800 @@ -272,10 +272,10 @@ ip addr flush ${pdev} ip link set ${netdev} addr ${mac} arp on add_to_bridge ${bridge} ${vif0} - add_to_bridge ${bridge} ${pdev} ip link set ${bridge} up ip link set ${vif0} up ip link set ${pdev} up + add_to_bridge2 ${bridge} ${pdev} do_ifup ${netdev} else # old style without ${vdev} @@ -323,6 +323,27 @@ brctl delbr ${bridge} } +# adds $dev to $bridge but waits for $dev to be in running state first +add_to_bridge2() { + local bridge=$1 + local dev=$2 + local maxtries=10 + + echo -n "Waiting for ${dev} to negotiate link." + for i in `seq ${maxtries}` ; do + if ifconfig ${dev} | grep -q RUNNING ; then + break + else + echo -n '.' + sleep 1 + fi + done + + if [ ${i} -eq ${maxtries} ] ; then echo '(link isnt in running state)' ; fi + + add_to_bridge ${bridge} ${dev} +} + case "$command" in start) op_start