xcat-core/xCAT-nbroot/overlay/etc/init.d/S10autodetect
jbjohnso bc6bcc869e -More complex network wait semantics:
-Move all waiting to a common loop, waiting a total of no more than 80 seconds for all nics
   -Give up after 15 seconds with no link-up reported by ethtool
   -Detect suspect spanning-tree.
   -Record spanning-tree suspicion, no link, and total dhcp timeouts to /etc/motd
-Have /etc/profile in nbroot cat /etc/motd, to make ssh into shell report diagnostic messages


git-svn-id: https://svn.code.sf.net/p/xcat/code/xcat-core/trunk@843 8638fb3e-16cb-4fca-ae20-7b5d299a9bcd
2008-03-19 18:33:48 +00:00

117 lines
3.5 KiB
Bash
Executable File

#!/bin/sh
# IBM(c) 2007 EPL license http://www.eclipse.org/legal/epl-v10.html
nic=0
hba=0
MOD=""
NICSTOWAIT=""
echo "cat /etc/motd" >> /etc/profile
#Load common usb drivers
modprobe ohci-hcd
modprobe uhci-hcd
modprobe ehci-hcd
for i in $(lspci -n | awk '{print $1 "%" $3}')
do
PCI=$(echo $i | awk -F% '{print $1}')
VID="0x0000$(echo $i | awk -F% '{print $2}' |awk -F: '{print $1}')"
DID="0x0000$(echo $i | awk -F% '{print $2}' |awk -F: '{print $2}')"
if egrep "^[^ ]*[ ]*$VID[ ]*$DID" /lib/modules/*/modules.pcimap >/dev/null
then
TYPE=$(
lspci | \
grep "^$PCI " | \
awk '{print $2}' | \
tr '[A-Z]' '[a-z]'
)
DESC=$(
lspci | \
grep "^$PCI " | \
awk -F: '{print $3}' | \
sed 's/^ *//'
)
MOD=$(
egrep "^[^ ]*[ ]*$VID[ ]*$DID" /lib/modules/*/modules.pcimap | \
head -1 | \
awk '{print $1}' | \
tr -d '"'
)
case "$TYPE" in
ethernet|network)
echo "Found ($MOD) $DESC"
GOTNIC=1
if [ "$MOD" = "gm" ]
then
echo "alias myri0 $MOD"
echo "alias myri0 $MOD" >>/etc/modules.conf
echo "alias myri0 $MOD" >>/etc/modprobe.conf
else
modprobe $MOD
ifconfig eth$nic up
udhcpc -i eth$nic -b &
NICSTOWAIT="$NICSTOWAIT eth$nic"
nic=$(($nic + 1))
fi
;;
scsi|raid)
echo "Found ($MOD) $DESC"
GOTHBA=1
modprobe $MOD
modprobe sd_mod
modprobe scsi_mod
hba=$(($hba + 1))
;;
*)
continue
;;
esac
fi
done
if [ -d /proc/device-tree/vdevice/l-lan* ]; then
modprobe ibmveth
for i in /sys/bus/vio/drivers/ibmveth/*/net*; do
udhcpc -i eth$nic -b
let extrat=0
until ifconfig eth$nic|grep "inet addr" || [ $extrat == 30 ]; do
sleep 1
let extrat=extrat+1
done
nic=$(($nic + 1))
done
fi
if [ -d /proc/device-tree/lhea* ]; then
modprobe ehea
for i in /sys/bus/ibmebus/devices/port*; do
udhcpc -i eth$nic -b
let extrat=0
until ifconfig eth$nic|grep "inet addr" || [ $extrat == 30 ]; do
sleep 1
let extrat=extrat+1
done
nic=$(($nic + 1))
done
fi
let extrat=0
until [ $extrat == 80 -o -z "$NICSTOWAIT" ]; do
sleep 1
let extrat=extrat+1
for nic in $NICSTOWAIT; do
if ifconfig $nic|grep "inet addr"; then
NICSTOWAIT=`echo $NICSTOWAIT|sed -e s/$nic//`
if [ $extrat -gt 45 ]; then
echo "Warning: $nic took more than 45 seconds to receive DHCP reply, spanning-tree may not be configured well, examine switch configuration" >> /etc/motd
fi
elif [ $extrat == 15 ]; then
if ethtool $nic | grep "Link detected: no"; then
echo "$nic did not have any link when bringing up network" >> /etc/motd
NICSTOWAIT=`echo $NICSTOWAIT|sed -e s/$nic//`
fi
fi
done
done
if [ ! -z "$NICSTOWAIT" ]; then
echo "Warning: the following network devices appeared to be connected to networks, but received no DHCP response: $NICSTOWAIT"
fi