]> git.ipfire.org Git - thirdparty/dracut.git/commitdiff
Add simple STP timeout handler
authorPhilippe Seewer <philippe.seewer@bfh.ch>
Thu, 17 Sep 2009 15:16:45 +0000 (17:16 +0200)
committerHarald Hoyer <harald@redhat.com>
Tue, 6 Oct 2009 13:16:52 +0000 (15:16 +0200)
This patch adds STP timeout error handling with arping. It's rather
simple since it only cares about the primary interface and blindly
assumes that if no gateway is available the root server is on the
same subnet.

modules.d/40network/check
modules.d/40network/install
modules.d/40network/netroot

index f2b137c1b3537334210952cd996a596345a59836..e5cd87e7be66ecca9cb2cc0492a1b2a11aed2027 100755 (executable)
@@ -2,7 +2,7 @@
 
 . $dracutfunctions
 
-for program in ip hostname; do 
+for program in ip arping; do 
   which $program >/dev/null 2>&1
   if [ $? -ne 0 ]; then
     dwarning "Could not find program \"$program\" required by network." 
index c16848d09beee92bd0f9a34b8f3a9430ad8d91fc..ee7c8711838e1498b303aa4206c2f4f3fcc189d6 100755 (executable)
@@ -1,5 +1,5 @@
 #!/bin/bash
-dracut_install ip dhclient brctl
+dracut_install ip dhclient brctl arping
 inst "$moddir/ifup" "/sbin/ifup"
 inst "$moddir/netroot" "/sbin/netroot"
 inst "$moddir/dhclient-script" "/sbin/dhclient-script"
index b905c1e6dbf0ed1f0b4d0585a394fe9ddcda8bc8..6f1ff77c2a32f9329ea7ff35db1ca6a7992ae7d5 100755 (executable)
@@ -77,6 +77,29 @@ done
 [ -e /tmp/net.$netif.hostname ]    && . /tmp/net.$netif.hostname
 [ -e /tmp/resolv.conf ] && cp -f /tmp/resolv.conf /etc/resolv.conf
 
+# Load interface options
+[ -e /tmp/net.$netif.override ] && . /tmp/net.$netif.override
+[ -e /tmp/dhclient.$netif.dhcpopts ] && . /tmp/dhclient.$netif.dhcpopts
+
+# Handle STP Timeout: arping default router or if not available the
+# root server. Note: This assumes that if no router is present the
+# root server is on the same subnet.
+#
+# TODO There's some netroot variants that don't (yet) have their 
+# server-ip netroot
+[ -n "$new_routers" ] && dest=${new_routers%%,*}
+[ -n "$gw" ] && dest=$gw
+if [ -z "$dest" ] ; then
+    dummy=${netroot#*:}
+    dummy=${dummy%%:*}
+    case "$dummy" in
+       [0-9]*\.[0-9]*\.[0-9]*\.[0-9]*) dest=$dummy;;
+    esac
+fi
+if [ -n "$dest" ] && ! arping -q -f -w 60 -I $netif $dest ; then
+    die "Resolving $dest via ARP on $netif failed"
+fi
+
 # Source netroot hooks before we start the handler
 source_all netroot