#!/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
