home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Chip 2007 January, February, March & April
/
Chip-Cover-CD-2007-02.iso
/
boot
/
i386
/
rescue
/
etc
/
sysconfig
/
hardware
/
scripts
/
chandev-to-hwcfg.sh
next >
Wrap
Linux/UNIX/POSIX Shell Script
|
2006-11-29
|
6KB
|
277 lines
#!/bin/bash
#
# Converts lines from /etc/chandev.conf to hwcfg-files.
#
# This is for debugging.
# DEBUG=1
if [ -z "$DEBUG" ]; then
HWCFG_DIR=/etc/sysconfig/hardware
CHANDEV=/etc/chandev.conf
else
CHANDEV=$1
HWCFG_DIR="."
fi
if [ ! -f "$CHANDEV" ]; then
# Nothing to be done
exit 0
fi
# What a bastard
retval=0
saved_IFS="$IFS"
IFS=","
while read; do
_line="$REPLY"
set -- $REPLY
if [ -n "$1" ]; then
_devname=${1%%[1234567890]*}
echo -n "Converting parameter $1: "
shift
case "$_devname" in
qeth*)
_read_chan=$(($1))
_write_chan=$(($2))
_data_chan=$(($3))
if [ "$_write_chan" -ne $(expr $_read_chan + 1) -o \
"$_data_chan" -ne $(expr $_read_chan + 2) ]; then
echo "Channel IDs not consecutive, cannot convert."
echo "Entry was:"
echo "$_line"
retval=1
break;
fi
shift; shift; shift;
if [ $# -gt 0 ]; then
if [ $1 -ne 0 ] ; then
_memsize=$1
fi
shift;
fi
if [ $# -gt 0 ] ; then
if [ $1 -ne -1 -a $1 -ne 0 ] ; then
_portno=$1
fi
fi
if [ "$_read_chan" -lt "$_write_chan" ]; then
CFG_ID="$_read_chan"
else
CFG_ID="$_write_chan"
fi
if [ "$CFG_ID" -gt "$_data_chan" ]; then
CFG_ID="$_data_chan"
fi
_begin_id=$(printf "%04x" $CFG_ID)
eval CFGNAME[$CFG_ID]="hwcfg-qeth-bus-ccw-0.0.$_begin_id"
eval MODULE[$CFG_ID]="qeth_mod"
eval STARTMODE[$CFG_ID]="auto"
eval CCW_CHAN_NAME[$CFG_ID]="qeth"
eval CCW_CHAN_NUM[$CFG_ID]=3
eval CCW_CHAN_IDS[$CFG_ID]="\"0.0.$(printf "%04x" $_read_chan) 0.0.$(printf "%04x" $_write_chan) 0.0.$(printf "%04x" $_data_chan)\""
eval SCRIPT_up[$CFG_ID]="hwup-ccw"
eval SCRIPT_ccw[$CFG_ID]="hwup-ccw"
eval SCRIPT_ccwgroup[$CFG_ID]="hwup-qeth"
eval SCRIPT_down[$CFG_ID]="hwdown-ccw"
CFG_LIST="${CFG_LIST:+$CFG_LIST }$CFG_ID"
_entry="$_line"
echo "ok."
;;
ctc*|escon*|lcs*)
_read_chan=$(($1))
_write_chan=$(($2))
if [ "$_write_chan" -ne $(expr $_read_chan + 1) ]; then
echo "Channel IDs not consecutive, cannot convert."
echo "Entry was:"
echo "$_line"
retval=1
break;
fi
shift; shift;
if [ $# -gt 0 ]; then
if [ $1 -ne 0 ]; then
_memsize=$1
fi
shift
fi
if [ $# -gt 0 ]; then
if [ $1 -ne 0 ]; then
_port=$1
fi
shift
fi
if [ $# -gt 0 ]; then
if [ $1 -ne 0 ]; then
_checksum=$1
fi
shift
fi
if [ $# -gt 0 ] && [ $1 -ne 0 ]; then
_use_stats=$1
fi
if [ "$_read_chan" -lt "$_write_chan" ]; then
CFG_ID="$_read_chan"
else
CFG_ID="$_write_chan"
fi
_begin_id=$(printf "%04x" $CFG_ID)
eval CFGNAME[$CFG_ID]="hwcfg-$_devname-bus-ccw-0.0.$_begin_id"
eval MODULE[$CFG_ID]="ctc"
eval STARTMODE[$CFG_ID]="auto"
eval CCW_CHAN_NAME[$CFG_ID]=cu3088
eval CCW_CHAN_NUM[$CFG_ID]=2
eval CCW_CHAN_IDS[$CFG_ID]="\"0.0.$(printf "%04x" $_read_chan) 0.0.$(printf "%04x" $_write_chan)\""
eval CCW_CHAN_MODE[$CFG_ID]="$_port"
eval SCRIPT_up[$CFG_ID]="hwup-ccw"
eval SCRIPT_ccw[$CFG_ID]="hwup-ccw"
eval SCRIPT_ccwgroup[$CFG_ID]="hwup-ctc"
eval SCRIPT_down[$CFG_ID]="hwdown-ccw"
CFG_LIST="${CFG_LIST:+$CFG_LIST }$CFG_ID"
_entry="$_line"
echo "ok."
;;
add_parm*)
_chan_type=$1
if [ $(($_chan_type)) -ne $((0x10)) ]; then
echo "Unhandled device type $_chan_type in add_parms!"
retval=1
continue
fi
case $2 in
0x*)
shift
_begin_id=$1
shift
_end_id=$1
;;
*)
_begin_id=0
_end_id=$((0xFFFF))
;;
esac
while shift; do
case $1 in
portname*)
_port=${1#portname:}
for _id in $CFG_LIST; do
if [ $(($_id > $_begin_id)) ] && [ $((_id < $_end_id)) ] ; then
eval CCW_CHAN_MODE[$_id]="$_port"
fi
done
echo -n "(portname: $_port) "
;;
*)
if [ "$1" ]; then
echo -n "($1: ignored) "
fi
;;
esac
done
echo "ok."
_entry="$_entry;$_line"
;;
noauto*)
echo "ignored."
;;
use_devno_names*)
echo "ignored."
;;
*)
echo "not supported, please edit manually."
retval=1
;;
esac
fi
done < <(cat $CHANDEV | sed '/^#/d;/^ /d' | tr ";" "\n")
IFS="$saved_IFS"
for _cfg in $CFG_LIST; do
_hwcfg_file=${HWCFG_DIR}/${CFGNAME[$_cfg]}
cat > $_hwcfg_file <<EOF
#!/bin/sh
#
# ${CFGNAME[$_cfg]}
#
# Automatically converted from chandev entry
# $_entry
#
# Please check whether the specified adapter is
# correctly configured
#
STARTMODE="${STARTMODE[$_cfg]}"
MODULE="${MODULE[$_cfg]}"
MODULE_OPTIONS=""
MODULE_UNLOAD="no"
# Scripts to be called for the various events.
# If called manually SCRIPTUP is selected.
EOF
if [ $SCRIPT_up[$_cfg] ]; then
echo "SCRIPTUP=\"${SCRIPT_up[$_cfg]}\"" >> $_hwcfg_file
fi
if [ $SCRIPT_ccw[$_cfg] ]; then
echo "SCRIPTUP_ccw=\"${SCRIPT_ccw[_cfg]}\"" >> $_hwcfg_file
fi
if [ $SCRIPT_ccw[$_cfg] ]; then
echo "SCRIPTUP_ccwgroup=\"${SCRIPT_ccwgroup[_cfg]}\"" >> $_hwcfg_file
fi
if [ ${SCRIPT_down[$_cfg]} ]; then
echo "SCRIPTDOWN=\"${SCRIPT_down[$_cfg]}\"" >> $_hwcfg_file
fi
cat >> $_hwcfg_file <<EOF
# CCW_CHAN_IDS sets the channel IDs for this device
# The first ID will be used as the group ID
CCW_CHAN_IDS="${CCW_CHAN_IDS[$_cfg]}"
# CCW_CHAN_NUM set the number of channels for this device
CCW_CHAN_NUM="${CCW_CHAN_NUM[$_cfg]}"
EOF
if [ "$_devname" = "ctc" -o "$_devname" = "escon" ]; then
cat >> $_hwcfg_file <<EOF
# CCW_CHAN_MODE sets the protocol for CTC / ESCON
# 0 for compability mode (default)
# 1 for extended mode
# 2 for CTC-based tty
# 3 for compability mode with OS/390 and z/OS
EOF
if [ ${CCW_CHAN_MODE[$_cfg]} ]; then
echo "CCW_CHAN_MODE=\"${CCW_CHAN_MODE[$_cfg]}\"" >> $_hwcfg_file
else
echo "# CCW_CHAN_MODE=0" >> $_hwcfg_file
fi
echo >> $_hwcfg_file
elif [ "$_devname" = "lcs" ]; then
cat >> $_hwcfg_file <<EOF
# CCW_CHAN_MODE sets the port number for LCS
# Port number 0 is the default
EOF
if [ ${CCW_CHAN_MODE[$_cfg]} ]; then
echo "CCW_CHAN_MODE=\"${CCW_CHAN_MODE[$_cfg]}\"" >> $_hwcfg_file
else
echo "# CCW_CHAN_MODE=0" >> $_hwcfg_file
fi
echo >> $_hwcfg_file
else
cat >> $_hwcfg_file <<EOF
# CCW_CHAN_MODE sets the portname for OSA-Express / Hipersockets
EOF
if [ ${CCW_CHAN_MODE[$_cfg]} ]; then
echo "CCW_CHAN_MODE=\"${CCW_CHAN_MODE[$_cfg]}\"" >> $_hwcfg_file
else
echo "# CCW_CHAN_MODE=\"\"" >> $_hwcfg_file
fi
echo >> $_hwcfg_file
fi
echo Wrote ${CFGNAME[$_cfg]}
done
exit $retval