[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]

[PATCH] Use lsznet.raw from s390utils package (#563548).



The lsznet.raw and controlunits.sh files are now part of the s390-tools
project, which is in the s390utils package.  Remove our copies and make
sure we use the ones from the s390utils package.
---
 loader/Makefile.am     |    2 +-
 loader/controlunits.sh |  104 -----------------
 loader/linuxrc.s390    |   10 +-
 loader/lsznet.raw      |  286 ------------------------------------------------
 scripts/mk-images      |    9 +-
 scripts/upd-instroot   |    2 +
 6 files changed, 13 insertions(+), 400 deletions(-)
 delete mode 100644 loader/controlunits.sh
 delete mode 100644 loader/lsznet.raw

diff --git a/loader/Makefile.am b/loader/Makefile.am
index cfb7c7b..4d063bb 100644
--- a/loader/Makefile.am
+++ b/loader/Makefile.am
@@ -27,7 +27,7 @@ noinst_HEADERS     = *.h
 
 if IS_S390
 boot_PROGRAMS      += shutdown
-dist_boot_SCRIPTS  = linuxrc.s390 lsznet.raw controlunits.sh
+dist_boot_SCRIPTS  = linuxrc.s390
 else
 boot_PROGRAMS      += init
 endif
diff --git a/loader/controlunits.sh b/loader/controlunits.sh
deleted file mode 100644
index 5364d76..0000000
--- a/loader/controlunits.sh
+++ /dev/null
@@ -1,104 +0,0 @@
-# controlunits.sh: define some common control unit mappings
-# Copyright (C) IBM Corp. 2009
-# Author: Steffen Maier <maier de ibm com>
-#
-# This program is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; version 2 of the License only.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
-
-# The arrays (among other things) should be adapted, if any of those device
-# drivers start supporting different CU types/models.
-
-# The following combinations of control unit type and model were taken from the
-# Linux network device drivers for s390 on 2008-06-09 from Linux 2.6.25.4.
-# The list (among other things) should be adapted, if any of those device
-# drivers start supporting different CU types/models.
-# (Alternatively, the list could be generated by reading the modaliases
-#  directly out of the device driver modules:
-#  modinfo qeth/cu3088 | fgrep 'alias:'
-#  However, this would still require a list of device driver modules.)
-readonly -a CU=(
-    1731/01
-    1731/05
-    3088/08
-    3088/1f
-    3088/1e
-    3088/01
-    3088/60
-    3088/61
-)
-
-# $CU_CARDTYPE array is the only one which may contain entries with spaces
-readonly -a CU_CARDTYPE=(
-    "OSA (QDIO)"
-    "HiperSocket"
-    "CTC adapter"
-    "escon channel"
-    "ficon channel"
-    "LCS p390"
-    "LCS OSA"
-    "LCS CLAW"
-)
-
-readonly -a CU_DEVDRV=(
-    qeth
-    qeth
-    ctcm
-    ctcm
-    ctcm
-    lcs
-    lcs
-    lcs
-)
-
-readonly -a CU_DEVNAME=(
-    eth
-    hsi
-    ctc
-    ctc
-    ctc
-    eth
-    eth
-    eth
-)
-
-readonly -a CU_GROUPCHANNELS=(
-    3
-    3
-    2
-    2
-    2
-    2
-    2
-    2
-)
-
-readonly -a CHPIDTYPES=(
-    [0x10]=OSE
-    [0x11]=OSD
-    [0x24]=IQD
-)
-
-# Searches for a match of argument 1 on the array $CU and sets $cu_idx
-# to the matched array index on success.
-# Returns 0 on success, 1 on failure.
-function search_cu() {
-    local scu=$1
-    local i
-    for ((i=0; i < ${#CU[ ]}; i++)); do
-        if [ "$scu" == "${CU[i]}" ]; then
-            cu_idx=$i
-            return 0
-        fi
-    done
-    return 1
-}
diff --git a/loader/linuxrc.s390 b/loader/linuxrc.s390
index 6a8d2c2..258d1e7 100644
--- a/loader/linuxrc.s390
+++ b/loader/linuxrc.s390
@@ -31,7 +31,7 @@
 # - udevadm and udevd need to be there
 # - have /etc/udev/udev.conf with at least one comment line as content
 # - if necessary, have udev rules
-# - copy lsznet.raw and controlunits.sh to initrd
+# - lsznet.raw and znetcontrolunits from s390utils-base in /lib/s390-tools
 # - pack kernel modules and module-init-tools (no longer use busybox for that)
 # - "multi on" in /etc/host.conf [RH bugs 486457,486461,483244]
 
@@ -351,18 +351,14 @@ function udev_setup() {
 declare -a nettable
 
 function read_lsznet_output() {
-    #local lsznet_output=/tmp/lsznet.raw
-    #lsznet.raw > $lsznet_output
     count=0
     local line
     while read line; do
         nettable[$count]="$line"
         count=$((count + 1))
-    #done < $lsznet_output
-    #rm -f $lsznet_output
     # using the more sophisticated process substitution instead of temp file
     # requires the symlink /dev/fd -> /proc/self/fd => createDevices
-    done < <(lsznet)
+    done < <(/lib/s390-tools/lsznet.raw)
 }
 
 function print_nettable() {
@@ -515,7 +511,7 @@ declare -r BUSIDFORMAT=[[:xdigit:]][[:xdigit:]][[:xdigit:]][[:xdigit:]]
 declare -r IDFORMAT=$PREFIXFORMAT.$SSIDFORMAT.$BUSIDFORMAT
 declare -r SUBCHANNEL_TYPE_IO=0
 
-. /sbin/controlunits
+. /lib/s390-tools/znetcontrolunits
 
 function cardtype2cleartext() {
     local cardtype=$1
diff --git a/loader/lsznet.raw b/loader/lsznet.raw
deleted file mode 100644
index a954153..0000000
--- a/loader/lsznet.raw
+++ /dev/null
@@ -1,286 +0,0 @@
-#! /bin/bash
-
-# lsznet.raw: list sensible network device hardware setups for Linux on s390(x)
-# Copyright (C) IBM Corp. 2008,2009
-# Author: Steffen Maier <maier de ibm com>
-#
-# This program is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; version 2 of the License only.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
-
-readonly SYSFS=/sys
-# DEBUG=0 turns off debugging. >=1 means increasing debugging.
-readonly DEBUG=0
-
-# nothing to be changed below here
-
-export TEXTDOMAIN=lsznet.raw
-
-readonly CMD=${0##*/}
-
-function error() {
-    echo $"$CMD: ERROR: $*" 1>&2
-    exit 1;
-}
-
-# currently requires bash version 3.0 or later
-# (this seems reasonable since bash-3.0 has been shipped with
-#  RHEL 4.0, 4.1, 4.2, 4.3, 4.4, 4.5, 4.6, 4.7;
-#  bash-3.1 with RHEL 5.0, 5.1; and bash-3.2 with RHEL 5.2)
-if [ ${BASH_VERSINFO[0]} -lt 3 -o \
-    ${BASH_VERSINFO[1]} -lt 0 ]; then
-    error $"only works with BASH version 3.0 or later (current version used is ${BASH_VERSION})"
-fi
-
-# the script was designed for Linux kernel 2.6 and might work with newer ones
-kernel_version=$(uname -r)
-IFS=.
-read krn_ver krn_patch krn_foo <<< "$kernel_version"
-unset IFS
-if [ $krn_ver -lt 2 -o $krn_patch -lt 6 ]; then
-    error $"only works for kernel versions 2.6 or probably later"
-fi
-
-. /sbin/controlunits
-
-readonly PREFIXFORMAT=[[:xdigit:]]*
-readonly SSIDFORMAT=[0-3]
-readonly BUSIDFORMAT=[[:xdigit:]][[:xdigit:]][[:xdigit:]][[:xdigit:]]
-readonly IDFORMAT=$PREFIXFORMAT.$SSIDFORMAT.$BUSIDFORMAT
-readonly SUBCHANNEL_TYPE_IO=0
-
-function debug() {
-    level=$1
-    shift
-    [ $DEBUG -ge $level ] && echo "$*" 1>&2
-}
-
-# Returns symbolic name of CHPID type in $chpidtype_symbolic,
-# if an entry in the array $CHPIDTYPES has been found at index of argument 1.
-# Returns "?" otherwise.
-# Always succeeds and returns 0.
-function search_chpt() {
-    local chpidtype_number=$1
-    chpidtype_symbolic=${CHPIDTYPES[$((0x$chpidtype_number))]}
-    if [ "$chpidtype_symbolic" == "" ]; then
-        chpidtype_symbolic="?"
-    fi
-    return 0
-}
-
-# build_list:
-#
-# Prints list on standard output consisting of all subchannels and
-# ccwdevices whose control unit type/model match supported network
-# device types on s390.  Each matching entry is accompanied with
-# (almost all) corresponding attributes.
-#
-function build_list() {
-    # use /sys/devices/css*/ for startpath
-    readonly STARTPATH=$SYSFS/devices
-    # change to base directory so path globbing length with find is minimal
-    cd $STARTPATH
-    # fail out gracefully, if there is not expected sysfs environment
-    # (could even fail out near the top, if $(uname -m) != s390x)
-    csses=css$PREFIXFORMAT
-    for d in $csses; do
-        [ -d $d ] || exit
-    done
-    find $csses -name "$IDFORMAT" |
-    while read dir; do
-        debug 6 " examining sysfs directory $dir"
-        # must not use $...FORMAT (file globs) here since this is a regex:
-        [[ "$dir" =~ ^css([[:xdigit:]]+)/([[:xdigit:]]+\.[0-3]\.[[:xdigit:]]{4})/([[:xdigit:]]+\.[0-3]\.[[:xdigit:]]{4})$ ]]
-        case $? in
-            0)
-                # string matched the pattern
-                debug 6 " ${BASH_REMATCH[ ]}"
-                prefix=${BASH_REMATCH[1]}
-                subch=${BASH_REMATCH[2]}
-                devbusid=${BASH_REMATCH[3]}
-                subch_p=css$prefix/$subch
-                dev_p=$subch_p/$devbusid
-                debug 6 " $subch_p $dev_p"
-                ;;
-            1)
-                # string did not match the pattern
-                continue
-                ;;
-            2)
-                error $"syntax error in regex of match operator =~, code needs to be fixed"
-                ;;
-            *)
-                error $"unexpected return code of regex match operator =~, code needs to be fixed"
-                ;;
-        esac
-        debug 5 " sysfs directory matched regex $dir"
-        # skip non-I/O-subchannels, i.e. chsc and message subchannels
-	if [ -f $subch_p/type ]; then
-	    read type < $subch_p/type
-            if [ $type != $SUBCHANNEL_TYPE_IO ]; then
-                debug 3 " skip non-I/O subchannel"
-                continue
-            fi
-	fi
-        # get subchannel information...
-        # ATTENTION: hex values from sysfs are WITHOUT leading 0x prefix!
-        read chpid_list < $subch_p/chpids
-        read -a chpids <<< "$chpid_list"
-        if [ ${#chpids[ ]} -ne 8 ]; then
-            error $"sysfs reported ${#chpids[ ]} CHPIDs instead of expected 8"
-        fi
-        read pim pam pom foo < $subch_p/pimpampom
-        pimchpidZ=""
-        local chp
-        for ((chp=0; chp < 8; chp++)); do
-            mask=$((0x80 >> chp))
-            if (( 0x$pim & $mask )); then
-                pimchpidZ=${pimchpidZ}${chpids[chp]}
-            else
-                pimchpidZ=${pimchpidZ}"ZZ"
-            fi
-        done
-        # get device information...
-        read cutype < $dev_p/cutype
-        read active < $dev_p/online
-        # skip already active subchannels and those that are already in a
-        # ccwgroup and thus not available any more:
-        [ $active == "1" ] && continue
-        [ -h $dev_p/group_device ] && continue
-        # get chpid information...
-        pimchpids=${pimchpidZ//ZZ/}
-        [ $pimchpids == "" ] && continue
-        # Taking the first 2 hex digits as CHPID relies somewhat on the fact
-        # that network adaptors don't use multipathing and only have one CHP.
-        # Anyway it's OK since we're only interested in CHPID type and I guess
-        # this should be equal for all possible multipaths to the same device.
-        chpid=${pimchpids:0:2}
-        chpid_p=css$prefix/chp$prefix.$chpid
-        read chptype < $chpid_p/type
-        # filter and output...
-        if search_cu $cutype; then
-            if [ "${CU_DEVDRV[$cu_idx]}" == "ctc" ]; then
-                # assume CTC are mostly virtual and ignore chpid from sysfs
-                chpidtype_symbolic="-"
-            else
-                search_chpt $chptype
-            fi
-            echo $pimchpids $devbusid $STARTPATH/$dev_p $cutype $chpidtype_symbolic $chptype ${CU_DEVDRV[$cu_idx]} ${CU_DEVNAME[$cu_idx]} ${CU_GROUPCHANNELS[$cu_idx]} $cu_idx ${CU_CARDTYPE[$cu_idx]}
-        else
-            debug 5 " skip non-network device $devbusid CU $cutype"
-        fi
-    done
-}
-
-# search_groups:
-#
-# Prints enumeration list on standard output consisting of possible
-# hardware configurations (ccwgroups) for network devices on s390.
-# Each configuration suggestion includes corresponding attributes
-# that are of potential interest for the user and fit in a fixed column
-# table on an 80 column screen.
-#
-# PRECONDITION: Standard input has to be stably sorted by device bus IDs and
-# then by CHPIDs, i.e. grouped by CHPIDs.
-#
-function search_groups() {
-    local w_prefix w_ssid w_devno
-    local d_prefix d_ssid d_devno
-    local prefix ssid devno x
-    local chp devbusid dev_p cutype chpidtypename chptype devdrv devname groupchs cu_idx cardtype
-    # remembered last state variables for possible ccwgroup:
-    local r_prefix="Z"
-    local r_ssid="Z"
-    local r_devno="ZZZZ"
-    local r_chp="ZZ"
-    local r_cutype="ZZZZ/ZZ"
-    local count=0
-    local item=1
-    local skipped=0
-    # currently unused are: dev_p,chptype, cu_idx.
-    while read chp devbusid dev_p cutype chpidtypename chptype devdrv devname groupchs cu_idx cardtype; do
-        debug 1 " # $chp $devbusid $dev_p $cutype $chpidtypename $chptype $devdrv $devname $groupchs $cu_idx $cardtype"
-        IFS=.
-        read prefix ssid devno x <<< "$devbusid"
-        unset IFS
-        if [ $r_chp != $chp \
-            -o $r_prefix != $prefix \
-            -o $r_ssid != $ssid \
-            -o $r_cutype != $cutype ]; then
-            # restart with new read channel info and remember it
-            r_prefix=$prefix
-            r_ssid=$ssid
-            r_devno=$devno
-            r_chp=$chp
-            r_cutype=$cutype
-            count=1
-            debug 2 " INFO: restart on different CHPID or prefix or CUtype/model"
-            continue
-        fi
-        count=$((count + 1))
-        if [ $count -eq 2 ]; then
-            # about to check if write channel is one above read channel
-            if [ $((0x$devno)) -ne $((0x$r_devno + 1)) ]; then
-                # start with new read channel info
-                r_prefix=$prefix
-                r_ssid=$ssid
-                r_devno=$devno
-                r_chp=$chp
-                r_cutype=$cutype
-                count=1
-                skipped=$((skipped + 1))
-                # unimplemented possible packed channel usage option:
-                # remember unused channels for later use as data channel
-                debug 2 " INFO: restart on unmatching read channel"
-                continue
-            fi
-            w_prefix=$prefix
-            w_ssid=$ssid
-            w_devno=$devno
-        elif [ $count -eq 3 ]; then
-            # remember data channel info
-            d_prefix=$prefix
-            d_ssid=$ssid
-            d_devno=$devno
-        fi
-        debug 2 " INFO: groupchs=$groupchs count=$count"
-        if [ $count -ne $groupchs ]; then
-            debug 2 " INFO: skip"
-            continue
-        fi
-        # found possible ccwgroup
-        case $count in
-            2)
-                chlist=$r_prefix.$r_ssid.$r_devno,$w_prefix.$w_ssid.$w_devno
-                ;;
-            3)
-                chlist=$r_prefix.$r_ssid.$r_devno,$w_prefix.$w_ssid.$w_devno,$d_prefix.$d_ssid.$d_devno
-                ;;
-            *)
-                error $"unknown number of channels for group, code needs to be fixed"
-                ;;
-        esac
-        echo $item $cutype $chp $chpidtypename $devdrv $devname $chlist "$cardtype"
-        item=$((item + 1))
-        # restart after successful detection
-        r_prefix="Z"
-        count=0
-    done
-    debug 1 " STATISTIC: skipped $skipped devnos because of unmatching read channel"
-}
-
-build_list |
-# stable sort by device bus IDs and then by CHPIDs => grouped by CHPIDs
-# (sorting only works since keys are fixed no. of digits with leading zeros!)
-sort -s -k 1,1 -k 2,2 |
-#cat ; exit # move at desired line and uncomment to see intermediate output
-search_groups
diff --git a/scripts/mk-images b/scripts/mk-images
index eaf6270..92121b9 100755
--- a/scripts/mk-images
+++ b/scripts/mk-images
@@ -605,6 +605,13 @@ makeinitrd() {
             instbin $IMGPATH /usr/sbin/$cmd $MBD_DIR /sbin/$cmd
         done
 
+        # lsznet requirements
+        mkdir -p $MBD_DIR/lib/s390-tools
+        for lsznetbin in lsznet.raw znetcontrolunits ; do
+            target="/lib/s390-tools/$lsznetbin"
+            instbin $IMGPATH $target $MBD_DIR $target
+        done
+
         # required for lsznet
         instbin $IMGPATH /usr/bin/sort $MBD_DIR /sbin/sort
 
@@ -648,8 +655,6 @@ makeinitrd() {
     else
         instbin $IMGPATH ${LOADERBINDIR##$IMGPATH}/shutdown $MBD_DIR /sbin/shutdown
         instbin $IMGPATH /usr/lib/anaconda-runtime/loader/linuxrc.s390 $MBD_DIR /sbin/init
-        instbin $IMGPATH /usr/lib/anaconda-runtime/loader/lsznet.raw $MBD_DIR /sbin/lsznet
-        instbin $IMGPATH /usr/lib/anaconda-runtime/loader/controlunits.sh $MBD_DIR /sbin/controlunits
         instbin $IMGPATH /usr/sbin/dasdfmt $MBD_DIR /sbin/dasdfmt
     fi
 
diff --git a/scripts/upd-instroot b/scripts/upd-instroot
index a6c65ee..ec57f31 100755
--- a/scripts/upd-instroot
+++ b/scripts/upd-instroot
@@ -711,6 +711,8 @@ bin/tar
 bin/uname
 bin/vi
 lib/modules/ibm
+lib/s390-tools/lsznet.raw
+lib/s390-tools/znetcontrolunits
 lib/security
 sbin/arp
 sbin/cmsfscat
-- 
1.6.6


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]