Hello community,

here is the log from the commit of package s390-tools for openSUSE:Factory 
checked in at 2017-10-25 17:44:27
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/s390-tools (Old)
 and      /work/SRC/openSUSE:Factory/.s390-tools.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "s390-tools"

Wed Oct 25 17:44:27 2017 rev:10 rq:536228 version:2.1.0

Changes:
--------
--- /work/SRC/openSUSE:Factory/s390-tools/s390-tools.changes    2017-10-20 
14:39:11.974966866 +0200
+++ /work/SRC/openSUSE:Factory/.s390-tools.new/s390-tools.changes       
2017-10-25 17:44:30.787886244 +0200
@@ -1,0 +2,11 @@
+Mon Oct 23 23:41:51 UTC 2017 - [email protected]
+
+- Replaced the following SUSE-written scripts with wrappers that
+  call the IBM-provided chzdev command in s390-tools. (Fate#322268)
+  * ctc_configure
+  * dasd_configure
+  * qeth_configure
+  * zfcp_disk_configure
+  * zfcp_host_configure
+
+-------------------------------------------------------------------

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ ctc_configure ++++++
--- /var/tmp/diff_new_pack.F8Q34L/_old  2017-10-25 17:44:32.035827674 +0200
+++ /var/tmp/diff_new_pack.F8Q34L/_new  2017-10-25 17:44:32.039827487 +0200
@@ -2,316 +2,127 @@
 #
 # ctc_configure
 #
-# Configures a CTC device
+# Copyright (c) 2017 SUSE LINUX GmbH, Nuernberg, Germany.
+#
+# Configures a CTC device by calling the IBM-provided chzdev command.
+# Whereas this script used to validate the parameters provided to it,
+# we now rely on chzdev to do that instead. The script is intended only
+# as a "translation layer" to provide backward compatability for older
+# scripts and tools that invoke it.
 #
 # Usage:
 #   ctc_configure <read channel> <write channel> <online> [<protocol>]
 #
 #      read/write channel = x.y.ssss where
-#                           x is always 0 until IBM creates something that 
uses that number
-#                           y is the logical channel subsystem (lcss) number. 
Most often this is 0, but it could be non-zero
-#                           ssss is the four digit subchannel address of the 
device, in hexidecimal, with leading zeros.
+#                           x is always 0 until IBM creates something that
+#                              uses that number
+#                           y is the logical channel subsystem (lcss) number.
+#                              Most often this is 0, but it could be non-zero
+#                           ssss is the four digit subchannel address of the
+#                                 device, in hexidecimal, with leading zeros.
 #      online = 0 to take the device offline
 #               1 to bring the device online
-#      protocol = 0 Compatibility with peers other than OS/390®, or z/OS, for 
example, a z/VM TCP service machine. This is the default.
+#      protocol = 0 Compatibility with peers other than OS/390®, or z/OS, for
+#                    example, a z/VM TCP service machine. This is the default.
 #                 1 Enhanced package checking for Linux peers.
 #                 3 For compatibility with OS/390 or z/OS peers.
-#                 4 For MPC connections to VTAM on traditional mainframe 
operating systems.
+#                 4 For MPC connections to VTAM on traditional mainframe
+#                    operating systems.
 #
 # Return values:
-#   1  sysfs not mounted
-#   2  Invalid status for <online>
-#   3  No device found for read-channel
-#   4  No device found for write-channel
-#   5  Invalid device type
-#   6  Device type mismatch
-#   7  Could not load module
-#   8  CCW devices grouped different devices
-#   9  Could not group devices
-#   10 Could not set device online
-#   11 Could not set device offline
+#   Return codes are determined by the chzdev command.
 #
 
-if [ "${DEBUG}" != "yes" ]; then
-  DEBUG="no"
-fi
-
-DATUM=$(date)
-
-add_channel_for_cio() {
-       echo "$* # $DATUM" >> /boot/zipl/active_devices.txt
-}
-
-remove_channel_for_cio() {
-       [ -w /boot/zipl/active_devices.txt ] && sed -i -e "/^$1/d" 
/boot/zipl/active_devices.txt
-}
-
 mesg () {
     echo "$@"
 }
 
 debug_mesg () {
-    case "$DEBUG" in
-        yes) mesg "$@" ;;
-        *) ;;
+    case "${DEBUG}" in
+       yes) mesg "$@" ;;
+       *) ;;
     esac
 }
 
-# Get the mount point for sysfs
-while read MNTPT MNTDIR MNTSYS MNTTYPE; do
-    if test "$MNTSYS" = "sysfs"; then
-       SYSFS="$MNTDIR"
-       break;
-    fi 
-done </proc/mounts
-
-if [ -z "$SYSFS" ]; then
-    mesg "/sysfs not present"
-    exit 1
-fi
-
-if [ $# -lt 3 ] ; then
-    echo "Usage: $0 <read channel> <write channel> <online> [<protocol>]"
-    echo "     read/write channel = x.y.ssss where"
-    echo "                          x is always 0 until IBM creates something 
that uses that number"
-    echo "                          y is the logical channel subsystem (lcss) 
number. Most often this is 0, but it could be non-zero"
-    echo "                          ssss is the four digit subchannel address 
of the device, in hexidecimal, with leading zeros."
-    echo "     online = 0 to take the device offline"
-    echo "              1 to bring the device online"
-    echo "     protocol = 0 Compatibility with peers other than OS/390®, or 
z/OS, for example, a z/VM TCP service machine. This is the default."
-    echo "                1 Enhanced package checking for Linux peers."
-    echo "                3 For compatibility with OS/390 or z/OS peers."
-    echo "                4 For MPC connections to VTAM on traditional 
mainframe operating systems."
-    exit 1
-fi
-
-CTC_READ_CHAN=$1
-CTC_WRITE_CHAN=$2
-ONLINE=$3
-CTC_MODE=$4
-
-[ -z "$CTC_MODE" ] && CTC_MODE=0
-
-if [ -z "$ONLINE" ] || [ "$ONLINE" -ne "1" -a "$ONLINE" -ne "0" ]; then
-    mesg "Invalid device status $ONLINE"
-    exit 2
-fi
-
-_ccw_dir=${SYSFS}/bus/ccw/devices
+add_cio_channel() {
+       echo "$* # ${DATE}" >> /boot/zipl/active_devices.txt
+}
 
-debug_mesg "Configuring CTC/LCS device ${CTC_READ_CHAN}/${CTC_WRITE_CHAN}"
+remove_cio_channel() {
+       [ -w /boot/zipl/active_devices.txt ] && sed -i -e "/^${1}/d" 
/boot/zipl/active_devices.txt
+}
 
+usage(){
+  echo "Usage: ${0} <read channel> <write channel> <online> [<protocol>]"
+  echo "       read/write channel = x.y.ssss where"
+  echo "                            x is always 0 until IBM creates something 
that"
+  echo "                               uses that number"
+  echo "                            y is the logical channel subsystem (lcss) 
number."
+  echo "                               Most often this is 0, but it could be 
non-zero"
+  echo "                            ssss is the four digit subchannel address 
of the"
+  echo "                                  device, in hexidecimal, with leading 
zeros."
+  echo "       online = 0 to take the device offline"
+  echo "                1 to bring the device online"
+  echo "       protocol = 0 Compatibility with peers other than OS/390®, or 
z/OS, for"
+  echo "                     example, a z/VM TCP service machine. This is the 
default."
+  echo "                  1 Enhanced package checking for Linux peers."
+  echo "                  3 For compatibility with OS/390 or z/OS peers."
+  echo "                  4 For MPC connections to VTAM on traditional 
mainframe"
+  echo "                     operating systems."
+}
 
-if test ! -d "$_ccw_dir/$CTC_READ_CHAN" ; then
-    mesg "device $_ccw_dir/$CTC_READ_CHAN does not exist"
-    exit 3
-fi
-if test ! -d "$_ccw_dir/$CTC_WRITE_CHAN" ; then
-    mesg "device $_ccw_dir/$CTC_WRITE_CHAN does not exist"
-    exit 4
+if [ "${DEBUG}" != "yes" ]; then
+  DEBUG="no"
 fi
 
-CCW_CHAN_GROUP=
-for ccw in $_ccw_dir/$CTC_READ_CHAN $_ccw_dir/$CTC_WRITE_CHAN; do
+DATE=$(date)
 
-    read _cu_type < $ccw/cutype
-    read _dev_type < $ccw/devtype
-
-    case "$_cu_type" in
-        3088/01)
-            # P/390 network adapter
-            CCW_CHAN_NAME="cu3088"
-            CCW_CHAN_GROUP="lcs"
-            ;;
-        3088/08)
-            # Channel To Channel
-            CCW_CHAN_NAME="cu3088"
-            CCW_CHAN_GROUP="ctcm"
-            ;;
-        3088/1e)
-            # FICON adapter
-            CCW_CHAN_NAME="cu3088"
-            CCW_CHAN_GROUP="ctcm"
-            ;;
-        3088/1f)
-            # ESCON adapter (I.e. hardware CTC device)
-            CCW_CHAN_NAME="cu3088"
-            CCW_CHAN_GROUP="ctcm"
-            ;;
-        3088/60)
-            # Lan Channel Station
-            CCW_CHAN_NAME="cu3088"
-            CCW_CHAN_GROUP="lcs"
-            ;;
-       *)
-           CCW_CHAN_NAME=
-       ;;
-    esac
+CTC_READ_CHAN=${1}
+CTC_WRITE_CHAN=${2}
+ON_OFF=${3}
+CTC_MODE=${4}
 
-    if [ -z "$CCW_CHAN_NAME" ]; then
-       mesg "Not a valid CTC device (cu $_cutype, dev $_devtype)"
-       exit 5
-    fi
-
-    [ -z "$tmp_chan" ] && tmp_chan=$CCW_CHAN_GROUP
-done
-
-if [ "$tmp_chan" != "$CCW_CHAN_GROUP" ] ; then
-    mesg "CTC type mismatch (read: $tmp_chan, write: $CCW_CHAN_GROUP)"
-    exit 6
+if [ -z "${CTC_READ_CHAN}" ] || [ -z "${CTC_WRITE_CHAN}" ] || [ -z "${ON_OFF}" 
]; then
+  mesg "You didn't specify all the needed parameters."
+  usage
+  exit 1
 fi
 
-_ccw_groupdir=${SYSFS}/bus/ccwgroup
-
-# Check for modules
-if test ! -d "${_ccw_groupdir}/drivers/${CCW_CHAN_GROUP}" ; then
-    /sbin/modprobe $CCW_CHAN_GROUP
-
-    # Re-check whether module loading has succeeded
-    if test ! -d "${_ccw_groupdir}/drivers/${CCW_CHAN_GROUP}"; then
-       mesg "Could not load module ${CCW_CHAN_GROUP}"
-       exit 7
-    fi
+if [ -z "${CTC_MODE}" ]; then
+  PARM_LIST="${PARM_LIST} protocol=0"
+else PARM_LIST="${PARM_LIST} protocol=${CTC_MODE}"
 fi
 
-# Check for grouping
-_ccw_status_dir=
-if [ -e ${_ccw_dir}/${CTC_READ_CHAN}/group_device ] ; then
-    _ccw_status_dir=$(cd -P ${_ccw_dir}/${CTC_READ_CHAN}/group_device; echo 
$PWD)
-fi
-if [ -e ${_ccw_dir}/${CTC_WRITE_CHAN}/group_device ] ; then
-    _tmp_status_dir=$(cd -P ${_ccw_dir}/${CTC_READ_CHAN}/group_device; echo 
$PWD)
-    if [ "$_ccw_status_dir" ] && [ "$_ccw_status_dir" != "$_tmp_status_dir" ] 
; then
-       mesg "CCW devices grouped to different devices"
-       exit 8
-    fi
-    _ccw_status_dir=$_tmp_status_dir
-fi
-#
-#      Addresses are free (but may be bound to the wrong driver)
-#
-_ccw_drivers=${SYSFS}/bus/ccw/drivers
-for i in ${CTC_READ_CHAN} ${CTC_WRITE_CHAN}
-  do
-        if [ "$CCW_CHAN_GROUP" = "lcs" ]
-        then
-                if [ -e "${_ccw_drivers}/ctcm/${i}" ] ; then
-                        echo $i > ${_ccw_drivers}/ctcm/unbind
-                fi
-                if [ ! -e "${_ccw_drivers}/lcs/${i}" ] ; then
-                    echo $i > ${_ccw_drivers}/ctcm/bind
-                fi
-        else
-                if [ -e "${_ccw_drivers}/lcs/${i}" ] ; then
-                        echo $i > ${_ccw_drivers}/lcs/unbind
-                fi
-                if [ ! -e "${_ccw_drivers}/ctcm/${i}" ] ; then
-                        echo $i > ${_ccw_drivers}/ctcm/bind
-                fi
-        fi
-  done
-
-debug_mesg "Group is ${_ccw_groupdir}/drivers/${CCW_CHAN_GROUP}/group"
-if [ -z "$_ccw_status_dir" ] ; then
-    echo "$CTC_READ_CHAN,$CTC_WRITE_CHAN" > 
${_ccw_groupdir}/drivers/${CCW_CHAN_GROUP}/group
-    if [ -e ${_ccw_dir}/${CTC_READ_CHAN}/group_device ] ; then
-       _ccw_status_dir=$(cd -P ${_ccw_dir}/${CTC_READ_CHAN}/group_device; echo 
$PWD)
-    fi
+if [ -f /sys/bus/ccw/devices/${CTC_READ_CHAN}/cutype ]; then
+  read CU_TYPE < /sys/bus/ccw/devices/${CTC_READ_CHAN}/cutype
+else mesg "Psuedo file/sys/bus/ccw/devices/${CTC_READ_CHAN}/cutype doesn't 
exist."
+     mesg "Check to see if sysfs is mounted."
+     exit 1
 fi
 
-if [ -z "$_ccw_status_dir" -o ! -e  "$_ccw_status_dir" ] ; then
-    mesg "Could not group $CCW_CHAN_GROUP devices 
$CTC_READ_CHAN/$CTC_WRITE_CHAN"
-    exit 9
+if [ "${CU_TYPE}" == "3088/01" ] || [ "${CU_TYPE}" == "3088/60" ]; then
+  DEV_TYPE="lcs"
+else DEV_TYPE="ctc"
 fi
 
-CCW_CHAN_ID=${_ccw_status_dir##*/}
-
-read _ccw_dev_status < $_ccw_status_dir/online
-
-if [ "$ONLINE" -eq 1 ]; then
-    # Check whether we need to do something
-    if [ "$_ccw_dev_status" -eq 0 ]; then
-       if [ "$CTC_MODE" -gt 0  -a "$CCW_CHAN_GROUP" != "lcs" ]; then
-           echo $CTC_MODE > $_ccw_status_dir/protocol
-       fi
-       # Set the device online
-       debug_mesg "Setting device online"
-       echo "1" > $_ccw_status_dir/online
-        # Re-read device status
-       read _ccw_dev_status < $_ccw_status_dir/online
-       if [ "$_ccw_dev_status" -eq 0 ]; then
-           mesg "Could not set device ${CCW_CHAN_ID} online"
-           exit 10
-       fi
-    else
-       debug_mesg "Device ${CCW_CHAN_ID} is already online"
-    fi
-else
-    if [ "$_ccw_dev_status" -eq 1 ]; then
-        # Set the device offline
-       debug_mesg "Setting device offline"
-       echo "$ONLINE" > $_ccw_status_dir/online
-
-        # Re-read to check whether we have succeeded
-       _ccw_dev_status=$(cat $_ccw_status_dir/online)
-       if [ "$_ccw_dev_status" -ne "$ONLINE" ]; then
-           mesg "Could not set device ${CCW_CHAN_ID} offline"
-           exit 11
-       fi
-    else
-       debug_mesg "Device ${CCW_CHAN_ID} is already offline"
-    fi
-    # Always reset CTC Protocol
-    if [ "$CCW_CHAN_GROUP" != "lcs" ]; then
-       echo 0 > $_ccw_status_dir/protocol
-    fi
+if [ "${ON_OFF}" == 0 ]; then
+  debug_mesg "chzdev -d ${DEV_TYPE} ${CTC_READ_CHAN}"
+  chzdev -d ${DEV_TYPE} ${CTC_READ_CHAN}
+elif [ "${ON_OFF}" == 1 ]; then
+  debug_mesg "chzdev -e ${DEV_TYPE} ${CTC_READ_CHAN} ${PARM_LIST}"
+  chzdev -e ${DEV_TYPE} ${CTC_READ_CHAN} ${PARM_LIST}
+else mesg "You must specify a 0 or a 1 for the online/offline attribute."
+     usage
+     exit 1
 fi
 
-RULES_DIR=/etc/udev/rules.d
-RULES_FILE=51-${CCW_CHAN_GROUP}-${CCW_CHAN_ID}.rules
+RC=${?}
+if [ ${RC} -ne 0 ]; then
+  exit ${RC}
+fi
 
-if [ -d "$RULES_DIR" ]; then
-    if [ -f ${RULES_DIR}/${RULES_FILE} ]; then
-       rm -f ${RULES_DIR}/${RULES_FILE}
-    fi
-    remove_channel_for_cio "$CTC_READ_CHAN"
-    remove_channel_for_cio "$CTC_WRITE_CHAN"
-
-    if [ "$ONLINE" -eq "1" ]; then
-       add_channel_for_cio "$CTC_READ_CHAN,$CTC_WRITE_CHAN"
-        # Write a new udev rules file
-       cat > ${RULES_DIR}/${RULES_FILE} <<EOF
-# Configure ${CCW_CHAN_GROUP} device at ${CTC_READ_CHAN}/${CTC_WRITE_CHAN} 
(Protocol ${CTC_MODE})
-ACTION=="add", SUBSYSTEM=="ccw", KERNEL=="$CTC_READ_CHAN", 
RUN+="/sbin/modprobe --quiet $CCW_CHAN_GROUP"
-ACTION=="add", SUBSYSTEM=="ccw", KERNEL=="$CTC_READ_CHAN", DRIVER!="?*", 
GOTO="ctc-${CTC_READ_CHAN}-no-unbind"
-ACTION=="add", SUBSYSTEM=="ccw", KERNEL=="$CTC_READ_CHAN", DRIVER=="ctcm", 
GOTO="ctc-${CTC_READ_CHAN}-no-unbind"
-ACTION=="add", SUBSYSTEM=="ccw", KERNEL=="$CTC_READ_CHAN", 
ATTR{driver/unbind}="$CTC_READ_CHAN"
-LABEL="ctc-${CTC_READ_CHAN}-no-unbind"
-ACTION=="add", SUBSYSTEM=="ccw", KERNEL=="$CTC_READ_CHAN", DRIVER!="?*", 
ATTR{[drivers/ccw:ctcm]bind}="$CTC_READ_CHAN"
-ACTION=="add", SUBSYSTEM=="ccw", KERNEL=="$CTC_WRITE_CHAN", DRIVER!="?*", 
GOTO="ctc-${CTC_WRITE_CHAN}-no-unbind"
-ACTION=="add", SUBSYSTEM=="ccw", KERNEL=="$CTC_WRITE_CHAN", DRIVER=="ctcm", 
GOTO="ctc-${CTC_WRITE_CHAN}-no-unbind"
-ACTION=="add", SUBSYSTEM=="ccw", KERNEL=="$CTC_WRITE_CHAN", 
ATTR{driver/unbind}="$CTC_WRITE_CHAN"
-LABEL="ctc-${CTC_WRITE_CHAN}-no-unbind"
-ACTION=="add", SUBSYSTEM=="ccw", KERNEL=="$CTC_WRITE_CHAN", DRIVER!="?*", 
ATTR{[drivers/ccw:ctcm]bind}="$CTC_WRITE_CHAN"
-ACTION=="add", SUBSYSTEM=="ccw", KERNEL=="$CTC_READ_CHAN", 
IMPORT{program}="collect $CCW_CHAN_ID %k $CTC_READ_CHAN $CTC_WRITE_CHAN 
$CCW_CHAN_GROUP"
-ACTION=="add", SUBSYSTEM=="ccw", KERNEL=="$CTC_WRITE_CHAN", 
RUN+="/sbin/modprobe --quiet $CCW_CHAN_GROUP"
-ACTION=="add", SUBSYSTEM=="ccw", KERNEL=="$CTC_WRITE_CHAN", 
IMPORT{program}="collect $CCW_CHAN_ID %k $CTC_READ_CHAN $CTC_WRITE_CHAN 
$CCW_CHAN_GROUP"
-ACTION=="add", SUBSYSTEM=="drivers", KERNEL=="$CCW_CHAN_GROUP", 
IMPORT{program}="collect $CCW_CHAN_ID %k $CTC_READ_CHAN $CTC_WRITE_CHAN 
$CCW_CHAN_GROUP"
-ACTION=="remove", SUBSYSTEM=="ccw", KERNEL=="$CTC_READ_CHAN", 
IMPORT{program}="collect --remove $CCW_CHAN_ID %k $CTC_READ_CHAN 
$CTC_WRITE_CHAN $CCW_CHAN_GROUP"
-ACTION=="remove", SUBSYSTEM=="ccw", KERNEL=="$CTC_WRITE_CHAN", 
IMPORT{program}="collect --remove $CCW_CHAN_ID %k $CTC_READ_CHAN 
$CTC_WRITE_CHAN $CCW_CHAN_GROUP"
-ACTION=="remove", SUBSYSTEM=="drivers", KERNEL=="$CCW_CHAN_GROUP", 
IMPORT{program}="collect --remove $CCW_CHAN_ID %k $CTC_READ_CHAN 
$CTC_WRITE_CHAN $CCW_CHAN_GROUP"
-TEST=="[ccwgroup/${CCW_CHAN_ID}]", GOTO="ctc-${CCW_CHAN_ID}-end"
-ACTION=="add", SUBSYSTEM=="ccw", ENV{COLLECT_$CCW_CHAN_ID}=="0", 
ATTR{[drivers/ccwgroup:$CCW_CHAN_GROUP]group}="$CTC_READ_CHAN,$CTC_WRITE_CHAN"
-ACTION=="add", SUBSYSTEM=="drivers", KERNEL=="$CCW_CHAN_GROUP", 
ENV{COLLECT_$CCW_CHAN_ID}=="0", ATTR{group}="$CTC_READ_CHAN,$CTC_WRITE_CHAN"
-LABEL="ctc-${CCW_CHAN_ID}-end"
-EOF
-       if [ "$CTC_MODE" -gt 0 ]; then
-           cat >> ${RULES_DIR}/${RULES_FILE} <<EOF
-ACTION=="add", SUBSYSTEM=="ccwgroup", KERNEL=="$CCW_CHAN_ID", 
ATTR{protocol}="$CTC_MODE"
-EOF
-       fi
-       cat >> ${RULES_DIR}/${RULES_FILE} <<EOF
-ACTION=="add", SUBSYSTEM=="ccwgroup", KERNEL=="$CCW_CHAN_ID", ATTR{online}="1"
-EOF
-    fi
+if [ ${ON_OFF} == 1 ]; then
+  add_cio_channel "${CTC_READ_CHAN},${CTC_WRITE_CHAN}"
+else remove_cio_channel "${CTC_READ_CHAN}"
+     remove_cio_channel "${CTC_WRITE_CHAN}"
 fi

++++++ dasd_configure ++++++
--- /var/tmp/diff_new_pack.F8Q34L/_old  2017-10-25 17:44:32.059826547 +0200
+++ /var/tmp/diff_new_pack.F8Q34L/_new  2017-10-25 17:44:32.059826547 +0200
@@ -1,409 +1,146 @@
 #! /bin/sh
 #
 # dasd_configure
-# $Id: dasd_configure,v 1.10 2004/11/26 15:50:48 hare Exp $
 #
-# Copyright (c) 2001-2014 SUSE LINUX Products GmbH, Nuernberg, Germany.
+# Copyright (c) 2017 SUSE LINUX GmbH, Nuernberg, Germany.
 #
-# Configures or deconfigures a DASD device
+# Configures a DASD device by calling the IBM-provided chzdev command.
+# Whereas this script used to validate the parameters provided to it,
+# we now rely on chzdev to do that instead. The script is intended only
+# as a "translation layer" to provide backward compatability for older
+# scripts and tools that invoke it.
 #
 # Usage:
 #   dasd_configure [-f -t <dasd_type> ] <ccwid> <online> [use_diag]
 #
-#      -f force creation of udev rules, do not check values in /sys.
-#      -t DASD type. Must be provided if -f is used.
+#      -f Override safety checks
+#      -t DASD type. Must be provided if -f is used. Only dasd-eckd and
+#                     dasd-fba are supported - Deprecated
 #      ccwid = x.y.ssss where
 #              x is always 0 until IBM creates something that uses that number
-#              y is the logical channel subsystem (lcss) number. Most often 
this is 0, but it could be non-zero
-#              ssss is the four digit subchannel address of the device, in 
hexidecimal, with leading zeros.
+#              y is the logical channel subsystem (lcss) number. Most often
+#                 this is 0, but it could be non-zero
+#              ssss is the four digit subchannel address of the device, in
+#                    hexidecimal, with leading zeros.
 #      online = 0 to take the device offline
 #               1 to bring the device online
 #      use_diag = 0 to _not_ use z/VM DIAG250 I/O, which is the default
 #                 1 to use z/VM DIAG250 I/O
 #
 # Return values:
-#   1  If the "Usage:" line is displayed, not enough parameters specified.
-#   1  sysfs not mounted (if the "Usage:" line is not displayed).
-#   2  Invalid status for <online>
-#   3  No device found for <ccwid>
-#   4  Could not change state of the device
-#   5  Device is not a DASD
-#   6  Could not load module
-#   7  Failed to activate DASD
-#   8  DASD not formatted
-#   9  Only dasd-fba or dasd-eckd is supported.
+#   Return codes are determined by the chzdev command.
 #
 
-if [ "${DEBUG}" != "yes" ]; then
-  DEBUG="no"
-fi
-
-exitcode=0
-DASD_FORCE=0
-DASD_TYPE="unknown"
-
-DATUM=$(date)
-
-add_channel_for_cio() {
-       echo "$* # $DATUM" >> /boot/zipl/active_devices.txt
-}
-
-remove_channel_for_cio() {
-       [ -w /boot/zipl/active_devices.txt ] && sed -i -e "/^$1/d" 
/boot/zipl/active_devices.txt
-}
-
 mesg () {
     echo "$@"
 }
 
 debug_mesg () {
-    case "$DEBUG" in
+    case "${DEBUG}" in
        yes) mesg "$@" ;;
        *) ;;
     esac
 }
 
-if [ $# -lt 2 ] ; then
-    echo "Usage: $0 [options] <ccwid> <online> [use_diag]"
-    echo
-    echo "     -f force creation of udev rules, do not check values in /sys."
-    echo "     -t DASD type. Must be provided if -f is used."
-    echo "     ccwid = x.y.ssss where"
-    echo "             x is always 0 until IBM creates something that uses 
that number"
-    echo "             y is the logical channel subsystem (lcss) number. Most 
often this is 0, but it could be non-zero"
-    echo "             ssss is the four digit subchannel address of the 
device, in hexidecimal, with leading zeros."
-    echo "     online = 0 to take the device offline"
-    echo "              1 to bring the device online"
-    echo "     use_diag = 0 to _not_ use z/VM DIAG250 I/O, which is the 
default"
-    echo "                1 to use z/VM DIAG250 I/O"
-    exit 1
-fi
+add_cio_channel() {
+       echo "$* # ${DATE}" >> /boot/zipl/active_devices.txt
+}
 
-while [ $# -gt 0 ] ; do
-    case "$1" in
-       -f) # force creation of udev rules, do not check values in /sys
-           DASD_FORCE=1
-           ;;
-       -t*) # drive type. Must be provided if -f  is used.
-           if [ "$1" = "-t" ] ; then
-               if [ "$2" = "dasd-eckd" -o "$2" = "dasd-fba" ]; then
-                   DASD_TYPE=$2
-                   shift
-               else
-                   debug_mesg "Only dasd-eckd or dasd-fba are supported."
-                   exit 9
-               fi
-           fi
-           ;;
-       *)
-           break;
-           ;;
-    esac
-    shift
-done
+remove_cio_channel() {
+       [ -w /boot/zipl/active_devices.txt ] && sed -i -e "/^${1}/d" 
/boot/zipl/active_devices.txt
+}
 
-if [ $DASD_FORCE -eq 0 ]; then
-    # Get the mount point for sysfs
-    while read MNTPT MNTDIR MNTSYS MNTTYPE; do
-       if test "$MNTSYS" = "sysfs"; then
-           SYSFS="$MNTDIR"
-           break;
-       fi 
-    done </proc/mounts
-
-    if [ -z "$SYSFS" ]; then
-       mesg "/sysfs not present"
-       exit 1
-    fi
-else
-    CCW_CHAN_NAME=$DASD_TYPE
-    case $DASD_TYPE in
-       *eckd)
-           DISCIPLINE=ECKD
-           ;;
-       *fba)
-           DISCIPLINE=FBA
-           ;;
-       *)
-           mesg "Only dasd-eckd or dasd-fba are supported."
-           exit 9
-           ;;
-    esac
-fi # First instance of if [ $DASD_FORCE -eq 0 ]
+usage(){
+  echo "Usage: ${0} [-f -t <dasd_type> ] <ccwid> <online> [use_diag]"
+  echo
+  echo "       -f Override safety checks"
+  echo "       -t DASD type. Must be provided if -f is used. Only dasd-eckd 
and"
+  echo "                      dasd-fba are supported - Deprecated"
+  echo "       ccwid = x.y.ssss where"
+  echo "               x is always 0 until IBM creates something that uses 
that number"
+  echo "               y is the logical channel subsystem (lcss) number. Most 
often"
+  echo "                  this is 0, but it could be non-zero"
+  echo "               ssss is the four digit subchannel address of the 
device, in"
+  echo "                     hexidecimal, with leading zeros."
+  echo "       online = 0 to take the device offline"
+  echo "                1 to bring the device online"
+  echo "       use_diag = 0 to _not_ use z/VM DIAG250 I/O, which is the 
default"
+  echo "                  1 to use z/VM DIAG250 I/O"
+}
 
-CCW_CHAN_ID=$1
-ONLINE=$2
-USE_DIAG=$3
-
-[ -z "$USE_DIAG" ] && USE_DIAG=0
-
-if [ -z "$ONLINE" ] || [ "$ONLINE" -ne "1" -a "$ONLINE" -ne "0" ]; then
-    mesg "Invalid device status $ONLINE"
-    mesg "It must be a zero or a one."
-    exit 2
+if [ "${DEBUG}" != "yes" ]; then
+  DEBUG="no"
 fi
 
-if [ $DASD_FORCE -eq 0 ]; then
-    _ccw_dir=${SYSFS}/bus/ccw/devices
+DATE=$(date)
+
+DASD_FORCE=0
 
-    debug_mesg "Configuring device ${CCW_CHAN_ID}"
-    _ccw_status_dir="$_ccw_dir/$CCW_CHAN_ID"
+############################################################
+# Parse the parameters from the command line
+#
+ARGS=$(getopt --options ft: -n "dasd_configure" -- "$@")
+if [ $? != 0 ] ; then echo "Terminating..." >&2 ; exit 1 ; fi
 
-    if test ! -d "$_ccw_status_dir" ; then
-       if test "$ONLINE" -eq 1 ; then
-           mesg "No device ${CCW_CHAN_ID}"
-           exit 3
-       fi
-       _ccw_dev_status=0
-    else
-       read _cu_type < $_ccw_status_dir/cutype
-       read _dev_type < $_ccw_status_dir/devtype
-
-       case "$_cu_type" in
-           3990/*|2105/*|2107/*|1750/*|9343/*)
-               CCW_CHAN_NAME="dasd-eckd"
-               MODULE=dasd_eckd_mod
-               DISCIPLINE=ECKD
-               ;;
-           6310/*)
-               CCW_CHAN_NAME="dasd-fba"
-               MODULE=dasd_fba_mod
-               DISCIPLINE=FBA
-               ;;
-           3880/*)
-               case "$_dev_type" in
-                   3390/*)
-                       CCW_CHAN_NAME="dasd-eckd"
-                       MODULE=dasd_eckd_mod
-                       DISCIPLINE=ECKD
-                       ;;
-                   3370/*)
-                       CCW_CHAN_NAME="dasd-fba"
-                       MODULE=dasd_fba_mod
-                       DISCIPLINE=FBA
-                       ;;
-                   *)
-                       CCW_CHAN_NAME=
-                       ;;
-               esac
-               ;;
-           *)
-               CCW_CHAN_NAME=
-               ;;
-       esac
-
-       if [ -z "$CCW_CHAN_NAME" ]; then
-           mesg "Not a DASD device (cu $_cutype, dev $_devtype)"
-           exit 5
-       fi
-
-       # Check for modules
-       if test ! -d "${SYSFS}/bus/ccw/drivers/${CCW_CHAN_NAME}" ; then
-           /sbin/modprobe $MODULE
-
-           # Re-check whether module loading has succeeded
-           if test ! -d "${SYSFS}/bus/ccw/drivers/${CCW_CHAN_NAME}"; then
-               mesg "Could not load module ${MODULE}"
-               exit 6
-           fi
-       fi
-
-       read _ccw_dev_status < $_ccw_status_dir/online
-    fi # if test ! -d "$_ccw_status_dir"
-
-    #
-    # We check whether we are running under z/VM by looking for the string
-    # "Control Program: z/VM" in /proc/sysinfo
-    #
-    /bin/grep "Control Program: z/VM" /proc/sysinfo 2>&1 > /dev/null
-    if [ -x /sbin/vmcp -a $? -eq 0 ]; then
-       # Unconditionally load the vmcp module, loader might be broken
-       [ -x /sbin/modprobe ] && /sbin/modprobe -q vmcp
-       # Wait until udev is settled
-       [ -x /sbin/udevadm ] && /sbin/udevadm settle --timeout=30
-
-       # Check read-only status of virtual DASDs from z/VM
-       if /sbin/vmcp q v dasd > /dasd_attr.lst 2> /dev/null; then
-           while read x dev type label attr1 attr2 rest; do
-               dev=`echo $dev|tr A-F a-f`
-               if test "$type" = "ON"; then
-                   attr="$attr2"
-               else
-                   attr="$attr1"
-               fi
-               if [ "$CCW_CHAN_ID" = "0.0.$dev" ]; then
-                   if test "$attr" = "R/O"; then
-                       _ccw_use_readonly="1"
-                   fi
-               fi
-           done < /dasd_attr.lst
-       fi
-       rm -f /dasd_attr.lst
-    fi # if [ -x /sbin/vmcp -a $? -eq 0 ]
-
-    if [ "$ONLINE" -eq 1 ]; then
-       # Check whether we need to do something
-       read _ccw_use_diag < $_ccw_status_dir/use_diag
-
-       if [ "$_ccw_use_diag" -ne "$USE_DIAG" ] && 
-           [ "$_ccw_dev_status" -eq 1 ] ; then
-           # We need to change the DIAG access mode
-           # so we have to set the device offline first
-           debug_mesg "Setting device offline for DIAG access"
-           echo "0" > $_ccw_status_dir/online
-           # Re-read device status
-           read _ccw_dev_status < $_ccw_status_dir/online
-           if [ "$_ccw_dev_status" -ne 0 ]; then
-               mesg "Could not set the device offline for DIAG access"
-               exit 4
-           fi
-       fi
-
-       if [ "$_ccw_dev_status" -eq 0 ]; then
-           # Set readonly access if detected
-           if [ "$_ccw_use_readonly" ]; then
-               debug_mesg "Setting device read-only"
-               echo 1 > $_ccw_status_dir/readonly
-           fi
-
-           if [ "$USE_DIAG" -eq 1 ]; then
-               # Load the diag module if possible
-               [ -x /sbin/modprobe ] && /sbin/modprobe -q dasd_diag_mod
-               _has_dasd_diag=$(/bin/sed -n '/^dasd_diag_mod/p' /proc/modules)
-               if [ "$_has_dasd_diag" ]; then
-                   # DIAG mode is special:
-                   # We can only be sure if DIAG is available
-                   # _after_ we have activated the device
-                   debug_mesg "Activating DIAG access mode"
-                   echo "$USE_DIAG" > $_ccw_status_dir/use_diag
-                   read _ccw_use_diag < $_ccw_status_dir/use_diag
-                   # Set the device online
-                   debug_mesg "Setting device online"
-                   echo "1" > $_ccw_status_dir/online 2>/dev/null
-                   # Re-read device status
-                   read _ccw_dev_status < $_ccw_status_dir/online
-                   if [ "$_ccw_dev_status" -eq 0 ]; then
-                       mesg "Could not activate DIAG access mode for device 
${CCW_CHAN_ID}"
-                       USE_DIAG=0
-                       echo "$USE_DIAG" > $_ccw_status_dir/use_diag
-                       # Set the device online
-                       debug_mesg "Setting device online"
-                       echo "1" > $_ccw_status_dir/online
-                   else
-                       MODULE=dasd_diag_mod
-                   fi
-               else
-                   debug_mesg "DIAG mode not available"
-                   USE_DIAG=0
-                   # Set the device online
-                   debug_mesg "Setting device online"
-                   echo "1" > $_ccw_status_dir/online
-               fi # if [ "$_has_dasd_diag" ];
-           else
-               if [ "$_ccw_use_diag" -eq 1 ] ; then
-                   debug_mesg "Deactivating DIAG access mode"
-                   echo "0" > $_ccw_status_dir/use_diag
-                   read _ccw_use_diag < $_ccw_status_dir/use_diag
-               fi
-               # Set the device online
-               debug_mesg "Setting device online"
-               echo "1" > $_ccw_status_dir/online
-           fi # if [ "$USE_DIAG" -eq 1 ]
-
-           # Re-read device status
-           read _ccw_dev_status < $_ccw_status_dir/online
-           if [ "$_ccw_dev_status" -eq 0 ]; then
-               mesg "Could not set device ${CCW_CHAN_ID} online"
-               exit 4
-           fi
-
-           # Wait for the device to come online
-           read _dasd_state < $_ccw_status_dir/status
-           i=0
-           while [ "$_dasd_state" != "online" ] ; do
-               if [ "$_dasd_state" = "unformatted" ] ; then
-                   mesg "Device ${CCW_CHAN_ID} is unformatted"
-                   exitcode=8
-                   break
-               fi
-               [ $i -gt 30 ] && break
-               i=$(expr $i + 1)
-               sleep .1
-               read _dasd_state < $_ccw_status_dir/status
-           done
-       else
-           debug_mesg "Device ${CCW_CHAN_ID} is already online"
-       fi # if [ "$_ccw_dev_status" -eq 0 ]
-
-       read _dasd_state < $_ccw_status_dir/status
-       if [ "$_dasd_state" != "online" ] && [ "$_dasd_state" != "unformatted" 
] ; then
-           mesg "Failed to activate device ${CCW_CHAN_ID}, device in state 
$_dasd_state"
-           exit 7
-       fi
-    else
-       if [ "$_ccw_dev_status" -eq 1 ]; then
-           # Set the device offline
-           debug_mesg "Setting device offline"
-           echo "$ONLINE" > $_ccw_status_dir/online
-
-           # Re-read to check whether we have succeeded
-           _ccw_dev_status=$(cat $_ccw_status_dir/online)
-           if [ "$?" -ne  0 -o "$_ccw_dev_status" -ne "$ONLINE" ]; then
-               mesg "Could not set device ${CCW_CHAN_ID} offline"
-               exit 4
-           fi
-       else
-           debug_mesg "Device ${CCW_CHAN_ID} is already offline"
-       fi
-
-       if [ -d "$_ccw_status_dir" ] ; then
-           # Always disabling DIAG access
-           echo "0" > $_ccw_status_dir/use_diag
-       fi
-
-       # Set readonly access if detected
-       if [ "$_ccw_use_readonly" ]; then
-           debug_mesg "Setting device read-only"
-           echo 1 > $_ccw_status_dir/readonly
-       fi
-    fi # if [ "$ONLINE" -eq 1 ]
-
-    # Wait until udev is settled
-    [ -x /sbin/udevadm ] && /sbin/udevadm settle --timeout=30
-
-fi # Second instance of if [ $DASD_FORCE -eq 0 ]
-
-if [ $DEBUG = "no" ]; then
-    RULES_DIR=/etc/udev/rules.d
-else
-    RULES_DIR=.
+eval set -- "${ARGS}"
+debug_mesg "All the parms passed were ${ARGS}"
+
+while true; do
+       case "${1}" in
+               -f) debug_mesg "This used to mean udev rules will always be 
generated."
+                    debug_mesg "For chzdev, it means safety checks will be 
overridden."
+                    debug_mesg "Kinda sorta the same thing, really."
+                    PARM_LIST="${PARM_LIST} -f"
+                   DASD_FORCE=1
+                    shift 1
+                    ;;
+               -t) debug_mesg "This used to set the card type to ${2}"
+                    debug_mesg "Now it gets ignored."
+                    shift 2
+                    ;;
+               --) debug_mesg "Found the end of parms indicator: --"
+                    shift 1
+                    break
+                    ;;
+                *)  debug_mesg "At the catch-all select entry"
+                    debug_mesg "What was selected was ${1}"
+                    shift 1
+                    ;;
+        esac
+done
+
+CCW_CHAN_ID=${1}
+ON_OFF=${2}
+USE_DIAG=${3}
+
+if [ -z "${CCW_CHAN_ID}" ] || [ -z "${ON_OFF}" ]; then
+  mesg "You didn't specify all the needed parameters."
+  usage
+  exit 1
 fi
 
-RULES_FILE=51-dasd-${CCW_CHAN_ID}.rules
+if [ -n "${USE_DIAG}" ]; then
+  PARM_LIST="${PARM_LIST} use_diag=${USE_DIAG}"
+else PARM_LIST="${PARM_LIST} use_diag=0"
+fi
 
-if [ -d "$RULES_DIR" ]; then
-    if [ -f ${RULES_DIR}/${RULES_FILE} ]; then
-       rm -f ${RULES_DIR}/${RULES_FILE}
-    fi
-    remove_channel_for_cio "${CCW_CHAN_ID}"
-
-    if [ "$ONLINE" -eq "1" ]; then
-       add_channel_for_cio "${CCW_CHAN_ID}"
-       # Write a new hwcfg file
-       cat > ${RULES_DIR}/${RULES_FILE} <<EOF
-# Configure DASD device at ${CCW_CHAN_ID} (${DISCIPLINE} mode)
-ACTION=="add", SUBSYSTEM=="ccw", KERNEL=="${CCW_CHAN_ID}", 
IMPORT{program}="collect ${CCW_CHAN_ID} %k ${CCW_CHAN_ID} ${CCW_CHAN_NAME}"
-ACTION=="add", SUBSYSTEM=="drivers", KERNEL=="${CCW_CHAN_NAME}", 
IMPORT{program}="collect ${CCW_CHAN_ID} %k ${CCW_CHAN_ID} ${CCW_CHAN_NAME}"
-EOF
-       if [ "$USE_DIAG" -eq 1 ]; then
-           cat >> ${RULES_DIR}/${RULES_FILE} <<EOF
-ACTION=="add", ENV{COLLECT_${CCW_CHAN_ID}}=="0", 
ATTR{[ccw/$CCW_CHAN_ID]use_diag}="1"
-EOF
-       fi
-       cat >> ${RULES_DIR}/${RULES_FILE} <<EOF
-ACTION=="add", ENV{COLLECT_${CCW_CHAN_ID}}=="0", 
ATTR{[ccw/$CCW_CHAN_ID]online}="1"
-EOF
-    fi
+if [ "${ON_OFF}" == 0 ]; then
+  debug_mesg "chzdev -d dasd ${CCW_CHAN_ID}"
+  chzdev -d dasd ${CCW_CHAN_ID}
+elif [ "${ON_OFF}" == 1 ]; then
+  debug_mesg "chzdev -e dasd ${CCW_CHAN_ID} ${PARM_LIST}"
+  chzdev -e dasd ${CCW_CHAN_ID} ${PARM_LIST}
+else mesg "You must specify a 0 or a 1 for the online/offline attribute."
+     usage
+     exit 1
 fi
 
-exit $exitcode
+RC=${?}
+if [ ${RC} -ne 0 ]; then
+  exit ${RC}
+fi
+
+if [ ${ON_OFF} == 1 ]; then
+  add_cio_channel "${CCW_CHAN_ID}"
+else remove_cio_channel "${CCW_CHAN_ID}"
+fi

++++++ qeth_configure ++++++
--- /var/tmp/diff_new_pack.F8Q34L/_old  2017-10-25 17:44:32.155822043 +0200
+++ /var/tmp/diff_new_pack.F8Q34L/_new  2017-10-25 17:44:32.155822043 +0200
@@ -2,451 +2,173 @@
 #
 # qeth_configure
 #
-# Configures a qeth device
+# Copyright (c) 2017 SUSE LINUX GmbH, Nuernberg, Germany.
+#
+# Configures a qeth device by calling the IBM-provided chzdev command.
+# Whereas this script used to validate the parameters provided to it,
+# we now rely on chzdev to do that instead. The script is intended only
+# as a "translation layer" to provide backward compatability for older
+# scripts and tools that invoke it.
 #
 # Usage:
 #   qeth_configure [-i] [-l] [-f -t <CARDTYPE> ] [-o "Values"] -n <portno> -p 
<portname> <read chan> <write chan> <data chan> <online>
 #
 #      -i Configure IP takeover
 #      -l Configure Layer2 support
-#      -f force creation of udev rules, do not check values in /sys
-#      -t Valid cardtypes are: qeth, hsi, osn
+#      -f Override safety checks
+#      -t Valid cardtypes are: qeth, hsi - Deprecated
 #      -o General QETH options, separated by spaces
-#      -n QETH port number to use, 0 or 1. Only needed for real, not virtual 
devices.
-#      -p QETH Portname to use. Only needed if sharing a real OSA with z/OS.
+#      -n QETH port number to use, 0 or 1. Only needed for real, not virtual
+#          devices.
+#      -p QETH Portname to use - Deprecated. OSAs no longer need a port name.
 #      read/write/data chan = x.y.ssss where
-#                                x is always 0 until IBM creates something 
that uses that number
-#                                y is the logical channel subsystem (lcss) 
number. Most often this is 0, but it could be non-zero
-#                                ssss is the four digit subchannel address of 
the device, in hexidecimal, with leading zeros.
+#                                x is always 0 until IBM creates something that
+#                                   uses that number
+#                                y is the logical channel subsystem (lcss)
+#                                  number. Most often this is 0, but it could
+#                                   be non-zero
+#                                ssss is the four digit subchannel address of
+#                                      the device, in hexidecimal, with leading
+#                                      zeros.
 #      online = 0 to take the device offline
 #               1 to bring the device online
 #
 # Return values:
-#   1  sysfs not mounted
-#   2  Invalid status for <online>
-#   3  No device found for read channel
-#   4  No device found for write channel
-#   5  No device found for data channel
-#   6  Invalid device type
-#   7  Could not load module
-#   8  CCW devices grouped different devices
-#   9  Could not group devices
-#   10 Could not set device online
-#   11 Could not set device offline
+#   Return codes are determined by the chzdev command.
 #
 
-if [ "${DEBUG}" != "yes" ]; then
-  DEBUG="no"
-fi
-
-QETH_FORCE=0
-
 mesg () {
     echo "$@"
 }
 
-DATUM=$(date)
-
-add_channel_for_cio() {
-       echo "$* # $DATUM" >> /boot/zipl/active_devices.txt
-}
-
-remove_channel_for_cio() {
-       [ -w /boot/zipl/active_devices.txt ] && sed -i -e "/^$1/d" 
/boot/zipl/active_devices.txt
-}
-
 debug_mesg () {
-    case "$DEBUG" in
-        yes) mesg "$@" ;;
-        *) ;;
+    case "${DEBUG}" in
+       yes) mesg "$@" ;;
+       *) ;;
     esac
 }
 
-while [ $# -gt 0 ] ; do
-    case "$1" in
-       -i)
-           # Configure IP takeover
-           QETH_IPA_TAKEOVER=1
-           ;;
-       -f) # force creation of udev rules, do not check values in /sys
-           QETH_FORCE=1
-           ;;
-       -l)
-           # Configure Layer2 support
-           QETH_LAYER2_SUPPORT=1
-           ;;
-        -n*)
-            # QETH port number to use
-            if [ "$1" = "-n" ] ; then
-                QETH_PORTNO=$2
-                shift
-            else
-                QETH_PORTNO=${1#-n}
-            fi
-            ;;
-       -o)
-           # General QETH options, separated by spaces
-           QETH_OPTIONS=$2
-           shift
-           ;;
-       -p*)
-           # QETH Portname to use
-           if [ "$1" = "-p" ] ; then
-               QETH_PORTNAME=$2
-               shift
-           else
-               QETH_PORTNAME=${1#-p}
-           fi
-           ;;
-       -t*) # Card type. Must be provided if -f is used.
-           if [ "$1" = "-t" ] ; then
-               if [ "$2" = "qeth" -o "$2" = "hsi" -o "$2" = "osn" ]; then
-                       QETH_CARD=$2
-                       shift
-               else 
-                   mesg "Only qeth, hsi and osn are supported."
-                   exit 6
-               fi
-           fi
-            CCW_DRV="$QETH_CARD"
-           ;;
-       *)
-           break;
-           ;;
-    esac
-    shift
-done
-
-if [ $QETH_FORCE -eq 0 ]; then
-# Get the mount point for sysfs
-       while read MNTPT MNTDIR MNTSYS MNTTYPE; do
-           if test "$MNTSYS" = "sysfs"; then
-               SYSFS="$MNTDIR"
-               break;
-           fi 
-       done </proc/mounts
-
-       if [ -z "$SYSFS" ]; then
-           mesg "/sysfs not present"
-           exit 1
-       fi
-fi
-
-QETH_READ_CHAN=$1
-QETH_WRITE_CHAN=$2
-QETH_DATA_CHAN=$3
-ONLINE=$4
-
-if [ $# -lt 4 ] ; then
-    echo "Usage: $0 [options] <read chan> <write chan> <data chan> <online>"
-    echo "     -i Configure IP takeover"
-    echo "     -l Configure Layer2 support"
-    echo "     -f force creation of udev rules, do not check values in /sys"
-    echo "     -t Valid cardtypes are: qeth, hsi, osn"
-    echo "     -o General QETH options, separated by spaces"
-    echo "     -n QETH port number to use, 0 or 1. Only needed for real, not 
virtual devices."
-    echo "     -p QETH Portname to use. Only needed if sharing a real OSA with 
z/OS."
-    echo "     read/write/data chan = x.y.ssss where"
-    echo "                               x is always 0 until IBM creates 
something that uses that number"
-    echo "                               y is the logical channel subsystem 
(lcss) number. Most often this is 0, but it could be non-zero"
-    echo "                               ssss is the four digit subchannel 
address of the device, in hexidecimal, with leading zeros."
-    echo "     online = 0 to take the device offline"
-    echo "              1 to bring the device online"
-    exit 1
-fi
-
-if [ -z "$ONLINE" ] || [ "$ONLINE" -ne "1" -a "$ONLINE" -ne "0" ]; then
-    mesg "Invalid device status $ONLINE"
-    exit 2
-fi
-
-if [ $QETH_FORCE -eq 0 ]; then
-_ccw_dir=${SYSFS}/bus/ccw/devices
-
-# Convert any hexidecimal numbers to lower case
-QETH_READ_CHAN=$(echo ${QETH_READ_CHAN} | tr "[A-Z]" "[a-z]")
-QETH_WRITE_CHAN=$(echo ${QETH_WRITE_CHAN} | tr "[A-Z]" "[a-z]")
-QETH_DATA_CHAN=$(echo ${QETH_DATA_CHAN} | tr "[A-Z]" "[a-z]")
+add_cio_channel() {
+       echo "$* # ${DATE}" >> /boot/zipl/active_devices.txt
+}
 
-debug_mesg "Configuring QETH device 
${QETH_READ_CHAN}/${QETH_WRITE_CHAN}/${QETH_DATA_CHAN}"
+remove_cio_channel() {
+       [ -w /boot/zipl/active_devices.txt ] && sed -i -e "/^${1}/d" 
/boot/zipl/active_devices.txt
+}
 
+usage(){
+  echo "Usage: ${0} [options] <read chan> <write chan> <data chan> <online>"
+  echo "      -i Configure IP takeover"
+  echo "      -l Configure Layer2 support"
+  echo "      -f Override safety checks"
+  echo "      -t Valid cardtypes are: qeth, hsi - Deprecated."
+  echo "      -o General QETH options, separated by spaces"
+  echo "      -n QETH port number to use, 0 or 1. Only needed for real, not 
virtual"
+  echo "         devices."
+  echo "      -p QETH Portname to use - Deprecated. OSAs no longer need a port 
name."
+  echo "      read/write/data chan = x.y.ssss where"
+  echo "                                x is always 0 until IBM creates 
something that"
+  echo "                                  uses that number"
+  echo "                                y is the logical channel subsystem 
(lcss)"
+  echo "                                  number. Most often this is 0, but it 
could"
+  echo "                                  be non-zero"
+  echo "                                ssss is the four digit subchannel 
address of"
+  echo "                                     the device, in hexidecimal, with 
leading"
+  echo "                                     zeros."
+  echo "      online = 0 to take the device offline"
+  echo "               1 to bring the device online"
+}
 
-if test ! -d "$_ccw_dir/$QETH_READ_CHAN" ; then
-    mesg "No device ${QETH_READ_CHAN}"
-    exit 3
-fi
-if test ! -d "$_ccw_dir/$QETH_WRITE_CHAN" ; then
-    mesg "No device ${QETH_WRITE_CHAN}"
-    exit 4
-fi
-if test ! -d "$_ccw_dir/$QETH_DATA_CHAN" ; then
-    mesg "No device ${QETH_DATA_CHAN}"
-    exit 5
+if [ "${DEBUG}" != "yes" ]; then
+  DEBUG="no"
 fi
 
-CCW_CHAN_GROUP=
-for ccw in $_ccw_dir/$QETH_READ_CHAN $_ccw_dir/$QETH_WRITE_CHAN 
$_ccw_dir/$QETH_DATA_CHAN; do
+DATE=$(date)
 
-    read _cu_type < $ccw/cutype
-    read _dev_type < $ccw/devtype
-
-    case "$_cu_type" in
-        1731/01|1731/02)
-            # OSA/Express / Guest LAN
-            CCW_DRV="qeth"
-           QETH_CARD="qeth"
-            ;;
-       1731/05)
-            # Hipersockets
-            CCW_DRV="qeth"
-           QETH_CARD="hsi"
-            ;;
-       1731/06)
-            # OSA/N
-            CCW_DRV="qeth"
-           QETH_CARD="osn"
-            ;;
-       *)
-           CCW_DRV=
-       ;;
-    esac
+############################################################
+# Parse the parameters from the command line
+#
+ARGS=$(getopt --options ifln:o:p:t: -n "qeth_configure" -- "$@")
+if [ $? != 0 ] ; then echo "Terminating..." >&2 ; exit 1 ; fi
 
-    if [ -z "$CCW_DRV" ]; then
-       mesg "Not a valid QETH device (cu $_cutype, dev $_devtype)"
-       exit 6
-    fi
+eval set -- "${ARGS}"
+debug_mesg "All the parms passed were ${ARGS}"
+
+# Set some defaults
+LAYER_MODE="layer2=0"
+
+while true; do
+       case "${1}" in
+               -i) debug_mesg "Configure IP takeover"
+                   PARM_LIST="${PARM_LIST} ipa_takeover/enable=1"
+                   shift 1
+                   ;;
+               -f) debug_mesg "This used to mean udev rules will always be 
generated."
+                   debug_mesg "For chzdev, it means safety checks will be 
overridden."
+                   debug_mesg "Kinda sorta the same thing, really."
+                   PARM_LIST="${PARM_LIST} -f"
+                   shift 1
+                   ;;
+               -l) debug_mesg "Configure Layer 2 support"
+                   LAYER_MODE="layer2=1"
+                   shift 1
+                   ;;
+               -n) debug_mesg "Set QETH port number to ${2}"
+                   PARM_LIST="${PARM_LIST} portno=${2}"
+                   shift 2
+                   ;;
+               -o) debug_mesg "Add the following arbitrary parms: ${2}" 
+                   PARM_LIST="${PARM_LIST} ${2}"
+                   shift 2
+                   ;;
+               -p) debug_mesg "QETH Port name is no longer used, don't specify 
it: ${2}"
+                   shift 2
+                   ;;
+               -t) debug_mesg "This used to set the card type to ${2}"
+                   debug_mesg "Now it gets ignored."
+                   shift 2
+                   ;;
+               --) debug_mesg "Found the end of parms indicator: --"
+                   shift 1
+                   break
+                   ;;
+               *)  debug_mesg "At the catch-all select entry"
+                   debug_mesg "What was selected was ${1}"
+                   shift 1
+                   ;;
+        esac
 done
-fi # end QETH_FORCE
-
-# Portname is only required for OSA/Express
-if [ -n "$QETH_PORTNAME" -a "$QETH_CARD" != "qeth" ] ; then
-    debug_mesg "No portname required for $QETH_CARD adapters"
-    QETH_PORTNAME=
-fi
 
-if [ $QETH_FORCE -eq 0 ]; then
-_ccw_groupdir=${SYSFS}/bus/ccwgroup
-
-# Check for modules
-if test ! -d "${_ccw_groupdir}/drivers/${CCW_DRV}" ; then
-    /sbin/modprobe $CCW_DRV
-
-    # Re-check whether module loading has succeeded
-    if test ! -d "${_ccw_groupdir}/drivers/${CCW_DRV}"; then
-       mesg "Could not load module ${CCW_DRV}"
-       exit 7
-    fi
-fi
-
-# Check for grouping
-_ccwgroup_dir=
-if [ -e ${_ccw_dir}/${QETH_READ_CHAN}/group_device ] ; then
-    _ccwgroup_dir=$(cd -P ${_ccw_dir}/${QETH_READ_CHAN}/group_device; echo 
$PWD)
-fi
-if [ -e ${_ccw_dir}/${QETH_WRITE_CHAN}/group_device ] ; then
-    _tmp_status_dir=$(cd -P ${_ccw_dir}/${QETH_READ_CHAN}/group_device; echo 
$PWD)
-    if [ "$_ccwgroup_dir" ] && [ "$_ccwgroup_dir" != "$_tmp_status_dir" ] ; 
then
-       mesg "CCW devices grouped to different devices"
-       exit 8
-    fi
-    _ccwgroup_dir=$_tmp_status_dir
-fi
-if [ -e ${_ccw_dir}/${QETH_DATA_CHAN}/group_device ] ; then
-    _tmp_status_dir=$(cd -P ${_ccw_dir}/${QETH_DATA_CHAN}/group_device; echo 
$PWD)
-    if [ "$_ccwgroup_dir" ] && [ "$_ccwgroup_dir" != "$_tmp_status_dir" ] ; 
then
-       mesg "CCW devices grouped to different devices"
-       exit 8
-    fi
-    _ccwgroup_dir=$_tmp_status_dir
-fi
-if [ -z "$_ccwgroup_dir" ] ; then
-    echo "$QETH_READ_CHAN,$QETH_WRITE_CHAN,$QETH_DATA_CHAN" > 
${_ccw_groupdir}/drivers/${CCW_DRV}/group
-    if [ -e ${_ccw_dir}/${QETH_READ_CHAN}/group_device ] ; then
-       _ccwgroup_dir=$(cd -P ${_ccw_dir}/${QETH_READ_CHAN}/group_device; echo 
$PWD)
-    fi
+QETH_READ_CHAN=${1}
+QETH_WRITE_CHAN=${2}
+QETH_DATA_CHAN=${3}
+ON_OFF=${4}
+
+if [ -z "${QETH_READ_CHAN}" ] || [ -z "${QETH_WRITE_CHAN}" ] || [ -z 
"${QETH_DATA_CHAN}" ] || [ -z "${ON_OFF}" ]; then
+  mesg "You didn't specify all the needed parameters."
+  usage
+  exit 1
+fi
+
+if [ "${ON_OFF}" == 0 ]; then
+  debug_mesg "chzdev -d qeth ${QETH_READ_CHAN}"
+  chzdev -d qeth ${QETH_READ_CHAN}
+elif [ "${ON_OFF}" == 1 ]; then
+  debug_mesg "chzdev -e qeth ${LAYER_MODE} ${PARM_LIST} ${QETH_READ_CHAN}"
+  chzdev -e qeth ${LAYER_MODE} ${PARM_LIST} ${QETH_READ_CHAN}
+else mesg "You must specify a 0 or a 1 for the online/offline attribute."
+     usage
+     exit 1
+fi
+
+RC=${?}
+if [ ${RC} -ne 0 ]; then
+  exit ${RC}
+fi
+
+if [ ${ON_OFF} == 1 ]; then
+  add_cio_channel "${QETH_READ_CHAN},${QETH_WRITE_CHAN},${QETH_DATA_CHAN}"
+else remove_cio_channel "${QETH_READ_CHAN}"
+     remove_cio_channel "${QETH_WRITE_CHAN}"
+     remove_cio_channel "${QETH_DATA_CHAN}"
 fi
-
-if [ -z "$_ccwgroup_dir" -o ! -e  "$_ccwgroup_dir" ] ; then
-    mesg "Could not group $CCW_DRV devices 
$QETH_READ_CHAN/$QETH_WRITE_CHAN/$QETH_DATA_CHAN"
-    exit 9
-fi
-
-CCW_CHAN_ID=${_ccwgroup_dir##*/}
-
-read _online < $_ccwgroup_dir/online
-
-if [ "$ONLINE" -eq 1 ]; then
-    # Check whether we need to do something
-    # We do not check for the value of CCW_CHAN_MODE, since we
-    # might want to switch back and forth between several modes
-    if test "$_online" -eq "0" ; then
-       # Set the portname
-       if [ "$QETH_PORTNAME" ]; then
-           mesg "(portname $QETH_PORTNAME) "
-           echo "$QETH_PORTNAME" > $_ccwgroup_dir/portname
-       fi
-       # Activate Layer2 support
-       if [ -w "$_ccwgroup_dir/layer2" ] ; then
-           if [ "$QETH_LAYER2_SUPPORT" = "1" ]; then
-               mesg "(Layer2) "
-               echo 1 > $_ccwgroup_dir/layer2
-           else
-               echo 0 > $_ccwgroup_dir/layer2
-           fi
-       else
-           QETH_LAYER2_SUPPORT=
-       fi
-       # Enable IP address takeover
-       if [ "$QETH_IPA_TAKEOVER" ]; then
-           if [ "$QETH_IPA_TAKEOVER" = "1" ]; then
-               mesg "(IP takeover) "
-               echo 1 > $_ccwgroup_dir/ipa_takeover/enable
-           fi
-       fi
-       # Relative port number
-       if [ -w "$_ccwgroup_dir/portno" ] ; then
-           if [ -n "$QETH_PORTNO" ]; then
-               mesg "(Port $QETH_PORTNO) "
-               # This may fail, but trial and error is the only way to tell.
-               echo "$QETH_PORTNO" > $_ccwgroup_dir/portno
-           fi
-       else
-           unset QETH_PORTNO
-       fi
-       # Set additional options
-       if [ "$QETH_OPTIONS" ]; then
-           for opt in $QETH_OPTIONS; do
-               set -- $(IFS='='; echo $opt)
-               opt_name=$1
-               opt_val=$2
-               case "$opt_name" in
-                   portname|ipa_takeover|layer2)
-                       # These options are set above
-                       debug_mesg "Invalid option $opt_name"
-                       ;;
-                   *)
-                       if [ "$opt_name" -a "$opt_val" ]; then
-                           if [ -w "$_ccwgroup_dir/$opt_name" ]; then
-                               mesg "($opt_name) "
-                               echo "$opt_val" > $_ccwgroup_dir/$opt_name
-                               if [ $? -eq 0 ] ; then
-                                   cur_opts="$cur_opts ${opt_name}=${opt_val}"
-                               fi
-                           else
-                               # Skip invalid options
-                               debug_mesg "Invalid option $opt_name"
-                           fi
-                       fi
-                       ;;
-               esac
-           done
-           # Update options list
-           QETH_OPTIONS="$cur_opts"
-       fi
-
-       echo "1" > $_ccwgroup_dir/online 2> /dev/null
-        # Re-read device status
-       read _ccw_dev_status < $_ccwgroup_dir/online
-       if [ "$_ccw_dev_status" -eq 0 ]; then
-           mesg "Could not set device ${CCW_CHAN_ID} online"
-           exit 10
-       fi
-    else
-       debug_mesg "Device ${CCW_CHAN_ID} is already online"
-    fi
-else
-    if [ "$_online" -eq 1 ]; then
-        # Set the device offline
-       debug_mesg "Setting device offline"
-       echo "$ONLINE" > $_ccwgroup_dir/online
-
-        # Re-read to check whether we have succeeded
-       _online=$(cat $_ccwgroup_dir/online)
-       if [ "$_online" -ne "$ONLINE" ]; then
-           mesg "Could not set device ${CCW_CHAN_ID} offline"
-           exit 11
-       fi
-    else
-       debug_mesg "Device ${CCW_CHAN_ID} is already offline"
-    fi
-    echo 1 > $_ccwgroup_dir/ungroup
-fi
-else
-       CCW_CHAN_ID=$QETH_READ_CHAN
-fi # QETH_FORCE
-
-if [ $DEBUG = "no" ]; then
-       RULES_DIR=/etc/udev/rules.d
-else
-       RULES_DIR=.
-fi
-
-RULES_FILE=51-${QETH_CARD}-${CCW_CHAN_ID}.rules
-
-if [ -d "$RULES_DIR" ]; then
-    if [ -f ${RULES_DIR}/${RULES_FILE} ]; then
-       rm -f ${RULES_DIR}/${RULES_FILE}
-    fi
-    remove_channel_for_cio "${QETH_READ_CHAN}"
-    remove_channel_for_cio "${QETH_WRITE_CHAN}"
-    remove_channel_for_cio "${QETH_DATA_CHAN}"
-
-    if [ "$ONLINE" -eq "1" ]; then
-       add_channel_for_cio 
"${QETH_READ_CHAN},${QETH_WRITE_CHAN},${QETH_DATA_CHAN}"
-        # Write a new udev rules file
-       cat > ${RULES_DIR}/${RULES_FILE} <<EOF
-# Configure ${QETH_CARD} device at 
${QETH_READ_CHAN}/${QETH_WRITE_CHAN}/${QETH_DATA_CHAN}
-ACTION=="add", SUBSYSTEM=="drivers", KERNEL=="$CCW_DRV", 
IMPORT{program}="collect $CCW_CHAN_ID %k $QETH_READ_CHAN $QETH_WRITE_CHAN 
$QETH_DATA_CHAN $CCW_DRV"
-ACTION=="add", SUBSYSTEM=="ccw", KERNEL=="$QETH_READ_CHAN", 
IMPORT{program}="collect $CCW_CHAN_ID %k $QETH_READ_CHAN $QETH_WRITE_CHAN 
$QETH_DATA_CHAN $CCW_DRV"
-ACTION=="add", SUBSYSTEM=="ccw", KERNEL=="$QETH_WRITE_CHAN", 
IMPORT{program}="collect $CCW_CHAN_ID %k $QETH_READ_CHAN $QETH_WRITE_CHAN 
$QETH_DATA_CHAN $CCW_DRV"
-ACTION=="add", SUBSYSTEM=="ccw", KERNEL=="$QETH_DATA_CHAN", 
IMPORT{program}="collect $CCW_CHAN_ID %k $QETH_READ_CHAN $QETH_WRITE_CHAN 
$QETH_DATA_CHAN $CCW_DRV"
-ACTION=="remove", SUBSYSTEM=="drivers", KERNEL=="$CCW_DRV", 
IMPORT{program}="collect --remove $CCW_CHAN_ID %k $QETH_READ_CHAN 
$QETH_WRITE_CHAN $QETH_DATA_CHAN $CCW_DRV"
-ACTION=="remove", SUBSYSTEM=="ccw", KERNEL=="$QETH_READ_CHAN", 
IMPORT{program}="collect --remove $CCW_CHAN_ID %k $QETH_READ_CHAN 
$QETH_WRITE_CHAN $QETH_DATA_CHAN $CCW_DRV"
-ACTION=="remove", SUBSYSTEM=="ccw", KERNEL=="$QETH_WRITE_CHAN", 
IMPORT{program}="collect --remove $CCW_CHAN_ID %k $QETH_READ_CHAN 
$QETH_WRITE_CHAN $QETH_DATA_CHAN $CCW_DRV"
-ACTION=="remove", SUBSYSTEM=="ccw", KERNEL=="$QETH_DATA_CHAN", 
IMPORT{program}="collect --remove $CCW_CHAN_ID %k $QETH_READ_CHAN 
$QETH_WRITE_CHAN $QETH_DATA_CHAN $CCW_DRV"
-TEST=="[ccwgroup/${CCW_CHAN_ID}]", GOTO="${QETH_CARD}-${CCW_CHAN_ID}-end"
-ACTION=="add", SUBSYSTEM=="ccw", ENV{COLLECT_$CCW_CHAN_ID}=="0", 
ATTR{[drivers/ccwgroup:$CCW_DRV]group}="$QETH_READ_CHAN,$QETH_WRITE_CHAN,$QETH_DATA_CHAN"
-ACTION=="add", SUBSYSTEM=="drivers", KERNEL=="$CCW_DRV", 
ENV{COLLECT_$CCW_CHAN_ID}=="0", 
ATTR{[drivers/ccwgroup:$CCW_DRV]group}="$QETH_READ_CHAN,$QETH_WRITE_CHAN,$QETH_DATA_CHAN"
-LABEL="${QETH_CARD}-${CCW_CHAN_ID}-end"
-EOF
-       if [ "$QETH_PORTNAME" ]; then
-           cat >> ${RULES_DIR}/${RULES_FILE} <<EOF
-ACTION=="add", SUBSYSTEM=="ccwgroup", KERNEL=="$CCW_CHAN_ID", 
ATTR{portname}="$QETH_PORTNAME"
-EOF
-       fi
-        if [ "$QETH_PORTNO" ]; then
-            cat >> ${RULES_DIR}/${RULES_FILE} <<EOF
-ACTION=="add", SUBSYSTEM=="ccwgroup", KERNEL=="$CCW_CHAN_ID", 
ATTR{portno}="$QETH_PORTNO"
-EOF
-        fi
-       if [ "$QETH_LAYER2_SUPPORT" ]; then
-           cat >> ${RULES_DIR}/${RULES_FILE} <<EOF
-ACTION=="add", SUBSYSTEM=="ccwgroup", KERNEL=="$CCW_CHAN_ID", ATTR{layer2}="1"
-EOF
-       elif [ "${QETH_CARD}" != "osn" ]; then
-           cat >> ${RULES_DIR}/${RULES_FILE} <<EOF
-ACTION=="add", SUBSYSTEM=="ccwgroup", KERNEL=="$CCW_CHAN_ID", ATTR{layer2}="0"
-EOF
-       fi
-       if [ "$QETH_IPA_TAKEOVER" ]; then
-           cat >> ${RULES_DIR}/${RULES_FILE} <<EOF
-ACTION=="add", SUBSYSTEM=="ccwgroup", KERNEL=="$CCW_CHAN_ID", 
ATTR{ipa_takeover/enable}="1"
-EOF
-       fi
-       for opt in $QETH_OPTIONS; do
-           set -- $(IFS='='; echo $opt)
-           opt_name=$1
-           opt_val=$2
-           cat >> ${RULES_DIR}/${RULES_FILE} <<EOF
-ACTION=="add", SUBSYSTEM=="ccwgroup", KERNEL=="$CCW_CHAN_ID", 
ATTR{$opt_name}="$opt_val"
-EOF
-       done
-       cat >> ${RULES_DIR}/${RULES_FILE} <<EOF
-ACTION=="add", SUBSYSTEM=="ccwgroup", KERNEL=="$CCW_CHAN_ID", ATTR{online}="1"
-EOF
-    fi
-fi
-
-udevadm settle
-
-exit 0

++++++ zfcp_disk_configure ++++++
--- /var/tmp/diff_new_pack.F8Q34L/_old  2017-10-25 17:44:32.395810779 +0200
+++ /var/tmp/diff_new_pack.F8Q34L/_new  2017-10-25 17:44:32.395810779 +0200
@@ -2,318 +2,72 @@
 #
 # zfcp_disk_configure
 #
-# Configures a zfcp disk
+# Copyright (c) 2017 SUSE LINUX GmbH, Nuernberg, Germany.
+#
+# Configures a zfcp SCSI disk by calling the IBM-provided chzdev command.
+# Whereas this script used to validate the parameters provided to it,
+# we now rely on chzdev to do that instead. The script is intended only
+# as a "translation layer" to provide backward compatability for older
+# scripts and tools that invoke it.
 #
 # Usage:
 #   zfcp_disk_configure <ccwid> <wwpn> <lun> <online>
 #
 #      ccwid = x.y.ssss where
 #              x is always 0 until IBM creates something that uses that number
-#              y is the logical channel subsystem (lcss) number. Most often 
this is 0, but it could be non-zero
-#              ssss is the four digit subchannel address of the device, in 
hexidecimal, with leading zeros.
+#              y is the logical channel subsystem (lcss) number. Most often
+#                 this is 0, but it could be non-zero
+#              ssss is the four digit subchannel address of the device, in
+#                    hexidecimal, with leading zeros.
 #      online = 0 to take the device offline
 #               1 to bring the device online
 #
-# Return codes
-#   1  sysfs not mounted
-#   2  invalid value for <online>
-#   3  device <ccwid> does not exist
-#   4  WWPN invalid
-#   5  Could not activate WWPN for adapter
-#   6  Could not activate zFCP disk 
-#   7  SCSI disk could not be deactivated
-#   8  zFCP LUN could not be deregistered
-#   9  zFCP WWPN could not be deregistered
+# Return values:
+#   Return codes are determined by the chzdev command.
 #
 
-if [ "${DEBUG}" != "yes" ]; then
-  DEBUG="no"
-fi
-
 mesg () {
     echo "$@"
 }
 
 debug_mesg () {
-    case "$DEBUG" in
-        yes) mesg "$@" ;;
-        *) ;;
+    case "${DEBUG}" in
+       yes) mesg "$@" ;;
+       *) ;;
     esac
 }
 
-if [ $# -ne 4 ] ; then
-    echo "Usage: $0  <ccwid> <wwpn> <lun> <online>"
-    echo "     ccwid = x.y.ssss where"
-    echo "             x is always 0 until IBM creates something that uses 
that number"
-    echo "             y is the logical channel subsystem (lcss) number. Most 
often this is 0, but it could be non-zero"
-    echo "             ssss is the four digit subchannel address of the 
device, in hexidecimal, with leading zeros."
-    echo "     online = 0 to take the device offline"
-    echo "              1 to bring the device online"
-    exit 1
-fi
-
-# Get the mount point for sysfs
-while read MNTPT MNTDIR MNTSYS MNTTYPE; do
-    if test "$MNTSYS" = "sysfs"; then
-       SYSFS="$MNTDIR"
-       break;
-    fi 
-done </proc/mounts
+usage(){
+  echo "Usage: ${0}  <ccwid> <wwpn> <lun> <online>"
+  echo "       ccwid = x.y.ssss where"
+  echo "               x is always 0 until IBM creates something that uses 
that number"
+  echo "               y is the logical channel subsystem (lcss) number. Most 
often"
+  echo "                this is 0, but it could be non-zero"
+  echo "               ssss is the four digit subchannel address of the 
device, in"
+  echo "                   hexidecimal, with leading zeros."
+  echo "       online = 0 to take the device offline"
+  echo "                1 to bring the device online"
+}
 
-if [ -z "$SYSFS" ]; then
-    mesg "/sysfs not present"
-    exit 1
+if [ "${DEBUG}" != "yes" ]; then
+  DEBUG="no"
 fi
 
-udev_timeout=30
-CCW_CHAN_ID=$1
-FCP_WWPN=${2#0x*}
-FCP_LUN=${3#0x*}
-ONLINE=$4
+CCW_CHAN_ID=${1}
+FCP_WWPN="${2}"
+FCP_LUN="${3}"
+ON_OFF=${4}
 # normalise to lower case
-FCP_WWPN=`echo $FCP_WWPN | sed 
's/A/a/g;s/B/b/g;s/C/c/g;s/D/d/g;s/E/e/g;s/F/f/g'`
-FCP_LUN=`echo $FCP_LUN | sed 's/A/a/g;s/B/b/g;s/C/c/g;s/D/d/g;s/E/e/g;s/F/f/g'`
-
-if [ -z "$CCW_CHAN_ID" ] ; then
-    mesg "No CCW device specified"
-    exit 1
-fi
-
-if [ -z "$ONLINE" ] || [ "$ONLINE" -ne "1" -a "$ONLINE" -ne "0" ]; then
-    mesg "Invalid device status $ONLINE"
-    exit 2
-fi
-
-_ccw_dir=${SYSFS}/bus/ccw/devices
-
-_zfcp_dir="$_ccw_dir/$CCW_CHAN_ID"
-
-if test ! -d "$_zfcp_dir" ; then
-    mesg "No device ${CCW_CHAN_ID}"
-    exit 3
-fi
-
-RULES_DIR=/etc/udev/rules.d
-RULES_FILE=51-zfcp-${CCW_CHAN_ID}.rules
+FCP_WWPN=$(echo ${FCP_WWPN} | tr "A-Z" "a-z")
+FCP_LUN=$(echo ${FCP_LUN} | tr "A-Z" "a-z")
 
-if [ ! -f ${RULES_DIR}/${RULES_FILE} ]; then
-    debug_mesg "No configuration file for adapter ${CCW_CHAN_ID}"
+if [ "${ON_OFF}" == 0 ]; then
+  debug_mesg "chzdev -d zfcp-lun ${CCW_CHAN_ID}:${FCP_WWPN}:${FCP_LUN}"
+  chzdev -d zfcp-lun ${CCW_CHAN_ID}:${FCP_WWPN}:${FCP_LUN}
+elif [ "${ON_OFF}" == 1 ]; then
+  debug_mesg "chzdev -e zfcp-lun ${CCW_CHAN_ID}:${FCP_WWPN}:${FCP_LUN}"
+  chzdev -e zfcp-lun ${CCW_CHAN_ID}:${FCP_WWPN}:${FCP_LUN}
+else mesg "You must specify a 0 or a 1 for the online/offline attribute."
+     usage
+     exit 1
 fi
-
-# Check whether we need to do something
-read allow_lun_scan < /sys/module/zfcp/parameters/allow_lun_scan
-if [ "$allow_lun_scan" = "Y" ] ; then
-    for host in ${_zfcp_dir}/host* ; do
-       [ -d $host ] || continue
-       hba_num=${host##*host}
-    done
-    read port_type < /sys/class/fc_host/host${hba_num}/port_type
-    if [ "$port_type" = "NPIV VPORT" ] ; then
-       auto_lun_scan=1
-    fi
-
-    if [ -z "${hba_num}" ] ; then
-       if [ "$ONLINE" -eq "1" ]; then
-           debug_mesg "FCP adapter ${CCW_CHAN_ID} not configured"
-           exit 1
-       else
-           debug_mesg "FCP adapter ${CCH_CHAN_ID} already deconfigured"
-           exit 0
-       fi
-    fi
-elif [ -d ${_zfcp_dir}/0x${FCP_WWPN}/0x${FCP_LUN} ]; then
-    if [ "$ONLINE" -eq "1" ]; then
-       debug_mesg "FCP disk ${FCP_WWPN}:${FCP_LUN} already configured"
-       exit 0
-    fi
-else
-    if [ "$ONLINE" -eq "0" ]; then
-       debug_mesg "FCP disk ${FCP_WWPN}:${FCP_LUN} does not exist"
-       exit 0
-    fi
-fi
-
-if [ "$ONLINE" -eq "1" ]; then
-    # Configure SCSI disk
-    debug_mesg "Configuring FCP disk ${FCP_WWPN}:${FCP_LUN}"
-
-    # Check whether the wwpn exists
-    if [ "$auto_lun_scan" = 1 ] ; then
-       for rport in /sys/class/fc_remote_ports/rport-${hba_num}:* ; do
-           [ -f ${rport}/port_name ] || continue
-           read port_name < ${rport}/port_name
-           if [ "$port_name" = "0x${FCP_WWPN}" ] ; then
-               for t in ${rport}/device/target* ; do
-                   _targetid=${t#*target}
-               done
-               _zfcp_wwpn_dir=${rport}
-               break;
-           fi
-       done
-    else
-       _zfcp_wwpn_dir="${_zfcp_dir}/0x${FCP_WWPN}"
-    fi
-    if [ ! -d "${_zfcp_wwpn_dir}" ] ; then
-       mesg "WWPN ${FCP_WWPN} for adapter ${CCW_CHAN_ID} not found"
-       exit 5
-    fi
-    # Check and configure the zfcp-lun
-    if [ "$auto_lun_scan" = 1 ] ; then
-       if [ -n "${_targetid}" ] ; then
-           for _lun in /sys/class/scsi_device/${_targetid}:* ; do
-               [ -f ${_lun}/device/fcp_lun ] || continue
-               read _lunid < ${_lun}/device/fcp_lun
-               if [ "${_lunid}" = "0x${FCP_LUN}" ] ; then
-                   _zfcp_lun_dir="${_lun}/device"
-                   break;
-               fi
-           done
-       fi
-       if [ -z "$_zfcp_lun_dir" ] ; then
-           mesg "Could not activate FCP disk ${FCP_WWPN}:${FCP_LUN}"
-           exit 6
-       fi
-    else
-       # Check whether the WWPN is activated
-       if [ `cat ${_zfcp_wwpn_dir}/failed` -eq "1" ] ; then
-            mesg "WWPN ${FCP_WWPN} invalid."
-            exit 4 
-       fi
-       if [ ! -d "${_zfcp_wwpn_dir}/0x${FCP_LUN}" ] ; then
-           echo "0x${FCP_LUN}" > ${_zfcp_wwpn_dir}/unit_add
-           /sbin/udevadm settle
-       fi
-       # Re-check whether the disk could be activated
-       if [ ! -d "${_zfcp_wwpn_dir}/0x${FCP_LUN}" ] ; then
-           mesg "Could not activate FCP disk ${FCP_WWPN}:${FCP_LUN}"
-           exit 6
-       fi
-       # Check for failed disks
-       read wwpn_status < ${_zfcp_wwpn_dir}/0x${FCP_LUN}/status
-       while [ "$wwpn_status" != 0 ] ; do
-           sleep 1
-           read wwpn_status < ${_zfcp_wwpn_dir}/0x${FCP_LUN}/in_recovery
-           [ "$wwpn_status" = 0 ] && break
-       done
-       read wwpn_status < ${_zfcp_wwpn_dir}/0x${FCP_LUN}/failed
-       if [ "$wwpn_status" = 1 ] ; then
-           debug_mesg "ERP failed on FCP disk ${FCP_WWPN}:${FCP_LUN}"
-           exit 7
-       fi
-    fi
-else
-    # Deconfigure SCSI disk
-    debug_mesg "Deconfiguring FCP disk ${FCP_WWPN}:${FCP_LUN}"
-
-    _zfcp_wwpn_dir="${_zfcp_dir}/0x${FCP_WWPN}"
-    # Find the correspondig SCSI disk
-    for host_dir in $_zfcp_dir/host*; do
-       if [ -d $host_dir ] ; then
-           _zfcp_scsi_host_dir=$host_dir
-           break;
-       fi
-    done
-    if [ -d "$_zfcp_scsi_host_dir" ] ; then
-        # Deregister the disk from SCSI layer
-       for target in $_zfcp_scsi_host_dir/rport-*/target*/* ; do
-           [ "$target" != "${target##*/fc_transport}" ] && continue
-           if [ -d "$target" ] && [ -d "$target/scsi_device" ] ; then
-               _zfcp_scsi_id=${target##*/}
-               read _zfcp_tmp_hba < ${target}/hba_id
-               read _zfcp_tmp_wwpn < ${target}/wwpn
-               read _zfcp_tmp_lun < ${target}/fcp_lun
-               if [ "0x${FCP_LUN}" = "$_zfcp_tmp_lun" -a "0x${FCP_WWPN}" = 
"$_zfcp_tmp_wwpn" ] ; then
-                   if [ "$auto_lun_scan"  = 1 ] ; then
-                       mesg "Could not deactivate SCSI disk ${_zfcp_scsi_id}"
-                       exit 7
-                   else
-                       echo 1 > $target/delete
-                       _zfcp_scsi_dir=$target
-                   fi
-                   break;
-               fi
-           fi
-       done
-       /sbin/udevadm settle
-    else
-       debug_mesg "No SCSI disk found for FCP disk ${FCP_WWPN}:${FCP_LUN}"
-    fi
-
-    # Re-check whether the SCSI disk is gone
-    num=$udev_timeout
-    while [ $num -gt 0 ] ; do
-       [ -d "${_zfcp_scsi_dir}" ] || break
-       let num=$num-1
-       sleep 1
-    done
-    if [ -d "${_zfcp_scsi_dir}" ]; then
-       mesg "Could not deactivate SCSI disk ${_zfcp_scsi_id}"
-       exit 7
-    fi
-
-    # Wait for udev to catch up
-    /sbin/udevadm settle
-
-    # check multipathing
-    _zfcp_scsi_dev=$(multipathd -k'show paths' 2> /dev/null | sed -n 
"s/$_zfcp_scsi_id \(sd[a-z]*\).*/\1/p")
-    [ "$_zfcp_scsi_dev" ] && multipathd -k"del path $_zfcp_scsi_dev"
-
-    # Deconfigure the FCP_LUN
-    : ${_zfcp_wwpn_dir}
-    echo "0x${FCP_LUN}" > ${_zfcp_wwpn_dir}/unit_remove
-    if [ -d "${_zfcp_wwpn_dir}/0x${FCP_LUN}" ]; then
-       mesg "Could not deregister FCP LUN ${FCP_LUN}"
-       exit 8
-    fi
-
-    # Find all remaining activated disks
-    ZFCP_LUNS=
-    for _tmp_wwpn_dir in ${_zfcp_dir}/0x*; do
-       if [ -d "$_tmp_wwpn_dir" ]; then
-           tmp_wwpn=$(basename $_tmp_wwpn_dir)
-           # Find all luns
-           for _tmp_lun_dir in ${_tmp_wwpn_dir}/0x*; do
-               if [ -d "$_tmp_lun_dir" ]; then
-                   tmp_lun=$(basename $_tmp_lun_dir)
-                   tmp_port="${tmp_wwpn}:${tmp_lun}"
-                   ZFCP_LUNS="$ZFCP_LUNS
-$tmp_port"
-               fi
-           done
-       fi
-    done
-fi
-
-# And now update the rules file
-if test -d ${RULES_DIR}; then
-    # Find all WWPNs
-
-    read online < ${_zfcp_dir}/online;
-    if [ $online -eq 0 ] ; then
-       exit 0
-    fi
-
-    for port in ${_zfcp_dir}/0x* ; do
-       [ -d $port ] || continue;
-       [ -w $port/unit_remove ] || continue;
-       port_list="$port_list ${port##*/}"
-    done
-
-    cat > ${RULES_DIR}/${RULES_FILE} <<EOF
-# Configure zFCP device at ${CCW_CHAN_ID}
-ACTION=="add", SUBSYSTEM=="ccw", KERNEL=="$CCW_CHAN_ID", 
IMPORT{program}="collect $CCW_CHAN_ID %k $CCW_CHAN_ID zfcp"
-ACTION=="add", SUBSYSTEM=="drivers", KERNEL=="zfcp", IMPORT{program}="collect 
$CCW_CHAN_ID %k $CCW_CHAN_ID zfcp"
-ACTION=="add", ENV{COLLECT_$CCW_CHAN_ID}=="0", 
ATTR{[ccw/$CCW_CHAN_ID]online}="1"
-EOF
-    for port in $port_list; do
-       for lun in ${_zfcp_dir}/$port/0x* ; do
-           [ -d $lun ] || continue;
-           [ -r $lun/status ] || continue;
-           cat >> ${RULES_DIR}/${RULES_FILE} <<EOF
-ACTION=="add", KERNEL=="rport-*", ATTR{port_name}=="$port", SUBSYSTEMS=="ccw", 
KERNELS=="$CCW_CHAN_ID", ATTR{[ccw/$CCW_CHAN_ID]$port/unit_add}="${lun##*/}"
-EOF
-       done
-    done
-fi
-
-# EOF

++++++ zfcp_host_configure ++++++
--- /var/tmp/diff_new_pack.F8Q34L/_old  2017-10-25 17:44:32.423809465 +0200
+++ /var/tmp/diff_new_pack.F8Q34L/_new  2017-10-25 17:44:32.423809465 +0200
@@ -2,185 +2,94 @@
 #
 # zfcp_host_configure
 #
-# Configures a zfcp host adapter
+# Copyright (c) 2017 SUSE LINUX GmbH, Nuernberg, Germany.
+#
+# Configures a zfcp host adapter by calling the IBM-provided chzdev command.
+# Whereas this script used to validate the parameters provided to it,
+# we now rely on chzdev to do that instead. The script is intended only
+# as a "translation layer" to provide backward compatability for older
+# scripts and tools that invoke it.
+#
 #
 # Usage:
 #   zfcp_host_configure <ccwid> <online>
 #
 #      ccwid = x.y.ssss where
 #              x is always 0 until IBM creates something that uses that number
-#              y is the logical channel subsystem (lcss) number. Most often 
this is 0, but it could be non-zero
-#              ssss is the four digit subchannel address of the device, in 
hexidecimal, with leading zeros.
+#              y is the logical channel subsystem (lcss) number. Most often
+#                 this is 0, but it could be non-zero
+#              ssss is the four digit subchannel address of the device, in
+#                    hexidecimal, with leading zeros.
 #      online = 0 to take the device offline
 #               1 to bring the device online
 #
 # Return codes
-#   1  sysfs not mounted
-#   2  invalid value for <online>
-#   3  device <ccwid> does not exist
-#   4  module zfcp could not be loaded
-#   5  adapter status could not be changed
-#   6  wwpn ports still active
-#  10  adapter active but allow_lun_scan active
+#   Return codes are determined by the chzdev command.
 #
 
-if [ "${DEBUG}" != "yes" ]; then
-  DEBUG="no"
-fi
-
-DATUM=$(date)
-
-add_channel_for_cio() {
-       echo "$* # $DATUM" >> /boot/zipl/active_devices.txt
-}
-
-remove_channel_for_cio() {
-       [ -w /boot/zipl/active_devices.txt ] && sed -i -e "/^$1/d" 
/boot/zipl/active_devices.txt
-}
-
 mesg () {
     echo "$@"
 }
 
 debug_mesg () {
-    case "$DEBUG" in
-        yes) mesg "$@" ;;
-        *) ;;
+    case "${DEBUG}" in
+       yes) mesg "$@" ;;
+       *) ;;
     esac
 }
 
-if [ $# -ne 2 ] ; then
-    echo "Usage: $0  <ccwid> <online>"
-    echo "     ccwid = x.y.ssss where"
-    echo "             x is always 0 until IBM creates something that uses 
that number"
-    echo "             y is the logical channel subsystem (lcss) number. Most 
often this is 0, but it could be non-zero"
-    echo "             ssss is the four digit subchannel address of the 
device, in hexidecimal, with leading zeros."
-    echo "     online = 0 to take the device offline"
-    echo "              1 to bring the device online"
-    exit 1
-fi
+add_cio_channel() {
+       echo "$* # ${DATE}" >> /boot/zipl/active_devices.txt
+}
 
-# Get the mount point for sysfs
-while read MNTPT MNTDIR MNTSYS MNTTYPE; do
-    if test "$MNTSYS" = "sysfs"; then
-       SYSFS="$MNTDIR"
-       break;
-    fi 
-done </proc/mounts
-
-if [ -z "$SYSFS" ]; then
-    mesg "/sysfs not present"
-    exit 1
-fi
+remove_cio_channel() {
+       [ -w /boot/zipl/active_devices.txt ] && sed -i -e "/^${1}/d" 
/boot/zipl/active_devices.txt
+}
 
-CCW_CHAN_ID=$1
-ONLINE=$2
-MODULE=zfcp
-
-if [ -z "$CCW_CHAN_ID" ] ; then
-    mesg "No CCW device specified"
-    exit 1
-fi
+usage(){
+  echo "Usage: ${0}  <ccwid> <online>"
+  echo "       ccwid = x.y.ssss where"
+  echo "               x is always 0 until IBM creates something that uses 
that number"
+  echo "               y is the logical channel subsystem (lcss) number. Most 
often"
+  echo "                  this is 0, but it could be non-zero"
+  echo "               ssss is the four digit subchannel address of the 
device, in"
+  echo "                     hexidecimal, with leading zeros."
+  echo "       online = 0 to take the device offline"
+  echo "                1 to bring the device online"
+}
 
-if [ -z "$ONLINE" ] || [ "$ONLINE" != "1" -a "$ONLINE" != "0" ]; then
-    mesg "Invalid device status $ONLINE"
-    exit 2
+if [ "${DEBUG}" != "yes" ]; then
+  DEBUG="no"
 fi
 
-_ccw_dir=${SYSFS}/bus/ccw/devices
+DATE=$(date)
 
-_zfcp_dir="$_ccw_dir/$CCW_CHAN_ID"
+CCW_CHAN_ID=${1}
+ON_OFF=${2}
 
-if test ! -d "$_zfcp_dir" ; then
-    mesg "No device ${CCW_CHAN_ID}"
-    exit 3
+if [ -z "${CCW_CHAN_ID}" ] || [ -z "${ON_OFF}" ]; then
+  mesg "You didn't specify all the needed parameters."
+  usage
+  exit 1
 fi
 
-# Check whether we need to load the zfcp module
-if test ! -d "${SYSFS}/bus/ccw/drivers/zfcp"; then
-    modprobe ${MODULE}
-
-    # Re-check whether module loading has succeeded
-    if test ! -d "${SYSFS}/bus/ccw/drivers/zfcp"; then
-       mesg "Could not load module ${MODULE}"
-       exit 4
-    fi
+if [ "${ON_OFF}" == 0 ]; then
+  debug_mesg "chzdev -d zfcp-host ${CCW_CHAN_ID}"
+  chzdev -d zfcp-host ${CCW_CHAN_ID}
+elif [ "${ON_OFF}" == 1 ]; then
+  debug_mesg "chzdev -e zfcp-host ${CCW_CHAN_ID}"
+  chzdev -e zfcp-host ${CCW_CHAN_ID}
+else mesg "You must specify a 0 or a 1 for the online/offline attribute."
+     usage
+     exit 1
 fi
 
-RULES_DIR=/etc/udev/rules.d
-RULES_FILE=51-zfcp-${CCW_CHAN_ID}.rules
-ALREADY_ONLINE=0
-
-# Check whether we need to do something
-_zfcp_dev_status=$(cat $_zfcp_dir/online)
-if [ "$_zfcp_dev_status" -eq "$ONLINE" ]; then
-    debug_mesg "zFCP adapter ${CCW_CHAN_ID} already in status ${ONLINE}"
-    ALREADY_ONLINE=1
+RC=${?}
+if [ ${RC} -ne 0 ]; then
+  exit ${RC}
 fi
 
-debug_mesg "Configuring device ${CCW_CHAN_ID}"
-
-if [ -f ${RULES_DIR}/${RULES_FILE} ]; then
-    rm -f ${RULES_DIR}/${RULES_FILE}
-fi
-
-
-if [ "$ONLINE" -eq "1" ]; then
-    if [ "${ALREADY_ONLINE}" -eq "0" ]; then
-       # Activate the device
-       echo "$ONLINE" > $_zfcp_dir/online
-
-       # Now wait for the adapter to initialize
-       /sbin/udevadm settle
-    fi
-
-    for loop in 1 2 3 4 5 ; do
-       read status < /sys/bus/ccw/devices/$CCW_CHAN_ID/status
-       (( $status & 0x10000000 )) && break;
-    done
-    read wwpn_status < /sys/bus/ccw/devices/$CCW_CHAN_ID/status
-    if !(( $wwpn_status & 0x10000000 )) ; then
-       echo 0 > /sys/bus/ccw/devices/$CCW_CHAN_ID/online
-       mesg "Could not activate adapter, status $wwpn_status"
-       exit 5
-    fi
-
-    # Write the configuration file
-    if test -d ${RULES_DIR}; then
-       cat > ${RULES_DIR}/${RULES_FILE} <<EOF
-# Configuration for the zfcp adapter at CCW ID ${CCW_CHAN_ID}
-ACTION=="add", SUBSYSTEM=="ccw", KERNEL=="$CCW_CHAN_ID", 
IMPORT{program}="collect $CCW_CHAN_ID %k $CCW_CHAN_ID zfcp"
-ACTION=="add", SUBSYSTEM=="drivers", KERNEL=="zfcp", IMPORT{program}="collect 
$CCW_CHAN_ID %k $CCW_CHAN_ID zfcp"
-ACTION=="add", ENV{COLLECT_$CCW_CHAN_ID}=="0", 
ATTR{[ccw/$CCW_CHAN_ID]online}="1"
-EOF
-    fi
-    add_channel_for_cio "${CCW_CHAN_ID}"
-    # Check whether we need to do something
-    read allow_lun_scan < /sys/module/zfcp/parameters/allow_lun_scan
-    if [ "$allow_lun_scan" = "Y" ] ; then
-       for host in ${_zfcp_dir}/host* ; do
-           [ -d $host ] || continue
-           hba_num=${host##*host}
-       done
-       # Automatic LUN scan is only possible on NPIV ports
-       read port_type < /sys/class/fc_host/host${hba_num}/port_type
-       if [ "$port_type" = "NPIV VPORT" ] ; then
-           exit 10;
-       fi
-    fi
-else
-    echo "0" > ${_zfcp_dir}/online
-    # Re-read to check whether we have succeeded
-    _ccw_dev_status=$(cat $_zfcp_dir/online)
-    if [ "$_ccw_dev_status" -ne "$ONLINE" ]; then
-       mesg "Could not change status of device ${CCW_CHAN_ID} to $ONLINE"
-       exit 5
-    fi
-    echo "${CCW_CHAN_ID}" > /sys/bus/ccw/drivers/zfcp/unbind
-    echo "${CCW_CHAN_ID}" > /sys/bus/ccw/drivers/zfcp/bind
-    remove_channel_for_cio "${CCW_CHAN_ID}"
-
-    debug_mesg "zFCP adapter at ${CCW_CHAN_ID} deactivated"
+if [ ${ON_OFF} == 1 ]; then
+  add_cio_channel "${CCW_CHAN_ID}"
+else remove_cio_channel "${CCW_CHAN_ID}"
 fi
-
-# EOF


Reply via email to