You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

90 lines
1.6 KiB

#!/bin/sh
[ -z "$DEVPATH" ] && exit 0
[ "$SUBSYSTEM" != "ccw" ] && exit 0
[ -e /etc/ccw.conf ] || exit 0
get_config_by_subchannel()
{
CHANNEL="$1"
while read line; do
IFS=,
set $line
for i in $@; do
if [ "$CHANNEL" = "$i" ]; then
echo $line
return 0
fi
done
if [ "$CHANNEL" = "$2" ]; then
echo $line
return 0
fi
done < /etc/ccw.conf
return 1
}
# First, determine our channel
CHANNEL=${DEVPATH##*/}
CONFIG=$(get_config_by_subchannel $CHANNEL)
[ $? -ne 0 -o -z "$CONFIG" ] && exit 0
set $CONFIG
NETTYPE=$1
shift
SUBCHANNELS="$1"
OPTIONS=""
CHANNEL1="$1"
shift
while [ $# -gt 0 ]; do
case $1 in
layer2=*) LAYER2=${1##layer2=};;
*=*) OPTIONS="$OPTIONS $1";;
[0-9]*) SUBCHANNELS="$SUBCHANNELS,$1";;
esac
shift
done
# SUBCHANNELS is only set on mainframe ccwgroup devices
[ -z "$SUBCHANNELS" -o -z "$NETTYPE" ] && exit 0
DIR="/sys/bus/ccwgroup/drivers/$NETTYPE"
i=0
while [ $i -lt 20 ]; do
[ -e $DIR ] && break
sleep 0.1
i=$(($i+1))
done
SYSDIR="$DIR/$CHANNEL1"
if [ ! -e $SYSDIR ]; then
echo "$SUBCHANNELS" > $DIR/group
i=0
while [ $i -lt 20 ]; do
[ -e $SYSDIR ] && break
sleep 0.1
i=$(($i+1))
done
fi
# check if the interface is already online
if [ -e $SYSDIR/online ]; then
read on <$SYSDIR/online
[ "$on" = "1" ] && exit 0
fi
# first set layer2, other options may depend on it
[ -n "$LAYER2" ] && echo $LAYER2 > $SYSDIR/layer2
if [ -n "$OPTIONS" ]; then
for i in $OPTIONS; do
echo "${i##*=}" > "$SYSDIR/${i%%=*}"
done
fi
[ -e $SYSDIR/online ] && echo 1 > $SYSDIR/online