Poll for peth0 coming up before trying to attach it to the bridge. This fixes
authoremellor@leeni.uk.xensource.com <emellor@leeni.uk.xensource.com>
Tue, 10 Jan 2006 15:21:00 +0000 (15:21 +0000)
committeremellor@leeni.uk.xensource.com <emellor@leeni.uk.xensource.com>
Tue, 10 Jan 2006 15:21:00 +0000 (15:21 +0000)
a problem seen with tg3's needing some time for auto-negotiation, and so the
script would fail.

Patch courtesy of someone who's name has been lost to history.

Signed-off-by: Ewan Mellor <ewan@xensource.com>
tools/examples/network-bridge

index 652e4aacb2174550025ee4a0d5f7d273d4686f5c..ce383be86d04ff34788e08a2ca06c79a8669c7f3 100755 (executable)
@@ -242,10 +242,10 @@ using loopback.nloopbacks=<N> on the domain 0 kernel command line.
        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}
@@ -293,6 +293,27 @@ op_stop () {
     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