forked from pool/s390-tools
* Upgrade s390-tools to version 2.34 (jsc#PED-3223,jsc#PED-9591)
*** v2.34.0 * Changes of existing tools: - ap_tools/ap-check: Add support for vfio-ap dynamic configuration - dbginfo.sh: Update/Add additional DASD data collection - dumpconf: Add new parameter 'SCP_DATA' for SCSI/NVMe/ECKD dump devices - libutil: Make formatted meta-data configurable - s390-tools: Replace 'which' with built-in 'command -v' - zdump/dfi_elf: Support core dumps of vr-kernels * Bug Fixes: - chzdev: Fix warning about failed ATTR writes by udev - rust/pv: Try again if first CRL-URI is invalid - rust/pvattest: Add short option for --arpk - zdump: Fix 'zgetdump -i' ioctl error on s390 formatted dump file *** v2.33.1 * Bug Fixes: - s390-tools: Fix formatting and typos in README.md - s390-tools: Fix release string *** v2.33.0 * Add new tools / libraries: - chpstat: New tool for displaying channel path statistics - libutil: Add output format helpers(util_fmt: JSON, JSON-SEQ, CSV, text pairs) * Changes of existing tools / libraries: - chzdev: Add --is-owner to identify files created by zdev - dasdfmt: Change default mode to always use full-format (Note: affects ESE DASD) - libap: Significantly reduce delay time between file lock retries - pvattest: Rewrite from C to Rust - pvattest: Support additional data & user-data - rust/pv: Support for Attestation * Bug Fixes: - chreipl: Improve disk type detection when running under QEMU - dbginfo.sh: Use POSIX option with uname - s390-tools: Fix missing hyphen escapes in the man page for many tools - zipl/src: Fix bugs in disk_get_info() reproducible in corner cases *** v2.32.0 * Changes of existing tools: - cpumf/lscpumf: add support for machine type 3932 - genprotimg, pvattest, and pvsecret accept IBM signing key with Armonk as subject locality - zdump/zipl: Support for List-Directed dump from ECKD DASD - zkey: Detect FIPS mode and generate PBKDF for luksFormat according to it * Bug Fixes: - dbginfo.sh: dash compatible copy sequence - rust/pv_core: Fix UvDeviceInfo::get() method - zipl/src: Fix leak of files if run with a broken configuration - zkey: Fix convert command to accept only keys of type CCA-AESDATA * Revendored vendor.tar.gz * Removed obsolete patches - s390-tools-sles15sp5-01-rust-pv-support-Armonk-in-IBM-signing-key-subject.patch - s390-tools-sles15sp6-02-genprotimg-support-Armonk-in-IBM-signing-key-subject.patch - s390-tools-sles15sp6-03-libpv-support-Armonk-in-IBM-signing-key-subject.patch - s390-tools-sles15sp6-04-pvattest-Fix-root-ca-parsing.patch - s390-tools-sles15sp6-genprotimg-makefile.patch OBS-URL: https://build.opensuse.org/package/show/Base:System/s390-tools?expand=0&rev=219
This commit is contained in:
commit
6a6c0cb679
23
.gitattributes
vendored
Normal file
23
.gitattributes
vendored
Normal file
@ -0,0 +1,23 @@
|
||||
## Default LFS
|
||||
*.7z filter=lfs diff=lfs merge=lfs -text
|
||||
*.bsp filter=lfs diff=lfs merge=lfs -text
|
||||
*.bz2 filter=lfs diff=lfs merge=lfs -text
|
||||
*.gem filter=lfs diff=lfs merge=lfs -text
|
||||
*.gz filter=lfs diff=lfs merge=lfs -text
|
||||
*.jar filter=lfs diff=lfs merge=lfs -text
|
||||
*.lz filter=lfs diff=lfs merge=lfs -text
|
||||
*.lzma filter=lfs diff=lfs merge=lfs -text
|
||||
*.obscpio filter=lfs diff=lfs merge=lfs -text
|
||||
*.oxt filter=lfs diff=lfs merge=lfs -text
|
||||
*.pdf filter=lfs diff=lfs merge=lfs -text
|
||||
*.png filter=lfs diff=lfs merge=lfs -text
|
||||
*.rpm filter=lfs diff=lfs merge=lfs -text
|
||||
*.tbz filter=lfs diff=lfs merge=lfs -text
|
||||
*.tbz2 filter=lfs diff=lfs merge=lfs -text
|
||||
*.tgz filter=lfs diff=lfs merge=lfs -text
|
||||
*.ttf filter=lfs diff=lfs merge=lfs -text
|
||||
*.txz filter=lfs diff=lfs merge=lfs -text
|
||||
*.whl filter=lfs diff=lfs merge=lfs -text
|
||||
*.xz filter=lfs diff=lfs merge=lfs -text
|
||||
*.zip filter=lfs diff=lfs merge=lfs -text
|
||||
*.zst filter=lfs diff=lfs merge=lfs -text
|
1
.gitignore
vendored
Normal file
1
.gitignore
vendored
Normal file
@ -0,0 +1 @@
|
||||
.osc
|
13
59-graf.rules.opensuse
Normal file
13
59-graf.rules.opensuse
Normal file
@ -0,0 +1,13 @@
|
||||
#
|
||||
# Rules for unique 3270 device nodes created in /dev/3270/
|
||||
# This file should be installed in /usr/lib/udev/rules.d
|
||||
#
|
||||
|
||||
SUBSYSTEM!="ccw", GOTO="graf_end"
|
||||
DRIVER!="3270", GOTO="graf_end"
|
||||
|
||||
# Configure 3270 device
|
||||
ACTION=="add", SUBSYSTEM=="ccw", PROGRAM="/usr/sbin/chccwdev -e $kernel"
|
||||
ACTION=="remove", SUBSYSTEM=="ccw", PROGRAM="/usr/sbin/chccwdev -d $kernel"
|
||||
|
||||
LABEL="graf_end"
|
13
59-graf.rules.suse
Normal file
13
59-graf.rules.suse
Normal file
@ -0,0 +1,13 @@
|
||||
#
|
||||
# Rules for unique 3270 device nodes created in /dev/3270/
|
||||
# This file should be installed in /usr/lib/udev/rules.d
|
||||
#
|
||||
|
||||
SUBSYSTEM!="ccw", GOTO="graf_end"
|
||||
DRIVER!="3270", GOTO="graf_end"
|
||||
|
||||
# Configure 3270 device
|
||||
ACTION=="add", SUBSYSTEM=="ccw", PROGRAM="/sbin/chccwdev -e $kernel"
|
||||
ACTION=="remove", SUBSYSTEM=="ccw", PROGRAM="/sbin/chccwdev -d $kernel"
|
||||
|
||||
LABEL="graf_end"
|
5
59-prng.rules
Normal file
5
59-prng.rules
Normal file
@ -0,0 +1,5 @@
|
||||
#
|
||||
# Rule for prandom character device node permissions
|
||||
# This file should be installed in /usr/lib/udev/rules.d
|
||||
#
|
||||
ACTION=="add", SUBSYSTEM=="misc", KERNEL=="prandom", MODE="0444"
|
23
59-zfcp-compat.rules
Normal file
23
59-zfcp-compat.rules
Normal file
@ -0,0 +1,23 @@
|
||||
# Rules for creating the ID_PATH for SCSI devices based on the CCW bus
|
||||
# using the form: ccw-<BUS_ID>-zfcp-<WWPN>:<LUN>
|
||||
#
|
||||
ACTION=="remove", GOTO="zfcp_scsi_device_end"
|
||||
|
||||
#
|
||||
# Set environment variable "ID_ZFCP_BUS" to "1" if the devices
|
||||
# (both disk and partition) are SCSI devices based on FCP devices
|
||||
#
|
||||
KERNEL=="sd*", SUBSYSTEMS=="ccw", DRIVERS=="zfcp", ENV{.ID_ZFCP_BUS}="1"
|
||||
|
||||
# For SCSI disks
|
||||
KERNEL=="sd*[!0-9]", SUBSYSTEMS=="scsi", \
|
||||
ENV{.ID_ZFCP_BUS}=="1", ENV{DEVTYPE}=="disk", \
|
||||
SYMLINK+="disk/by-path/ccw-$attr{hba_id}-zfcp-$attr{wwpn}:$attr{fcp_lun}"
|
||||
|
||||
|
||||
# For partitions on a SCSI disk
|
||||
KERNEL=="sd*[0-9]", SUBSYSTEMS=="scsi", \
|
||||
ENV{.ID_ZFCP_BUS}=="1", ENV{DEVTYPE}=="partition", \
|
||||
SYMLINK+="disk/by-path/ccw-$attr{hba_id}-zfcp-$attr{wwpn}:$attr{fcp_lun}-part%n"
|
||||
|
||||
LABEL="zfcp_scsi_device_end"
|
25
90-s390-tools.conf
Normal file
25
90-s390-tools.conf
Normal file
@ -0,0 +1,25 @@
|
||||
#
|
||||
# Copyright (c) 2016 SUSE LINUX GmbH, Nuernberg, Germany.
|
||||
# All rights reserved.
|
||||
#
|
||||
# Please don't edit this file. Place your settings into
|
||||
# /etc/modprobe.d/99-local.conf instead.
|
||||
#
|
||||
# The dasd_diag_mod kernel module will not function properly
|
||||
# unless the dasd_fba_mod module is also loaded. However,
|
||||
# there are no cross-module symbol dependencies that would
|
||||
# cause and entry to be placed in
|
||||
# /lib/modules/$(uname -r)/modules.dep
|
||||
# So, we're adding this "soft" dependency here to make sure that
|
||||
# any time dasd_diag_mod gets loaded, so will dasd_fba_mod.
|
||||
#
|
||||
# Additionally, DASD devices that are supposed to be used in
|
||||
# DIAG250 mode will have problems because as far as the kernel
|
||||
# is concerned, and hence udev, the driver is dasd_fba_mod. So,
|
||||
# we need to also have the reverse dependency so that when
|
||||
# dasd_fba_mod gets loaded, so will dasd_diag_mod. This will
|
||||
# prevent problems that would show up in the system log as:
|
||||
# Setting the DASD online failed because of missing DIAG discipline
|
||||
#
|
||||
softdep dasd_diag_mod pre: dasd_fba_mod
|
||||
softdep dasd_fba_mod pre: dasd_diag_mod
|
57
README.SUSE.opensuse
Normal file
57
README.SUSE.opensuse
Normal file
@ -0,0 +1,57 @@
|
||||
|
||||
ls - Addons by SUSE
|
||||
|
||||
The following utility and its man page have been added to make it
|
||||
easier to determine the machine type on which Linux is running.
|
||||
|
||||
* cputype
|
||||
Usage: cputype
|
||||
|
||||
The following utilities and their man pages have been added by SUSE to
|
||||
ease the activation and deactivation of devices. These scripts are also
|
||||
used by YaST. Functionality not provided by these scripts cannot be
|
||||
provided by YaST.
|
||||
These scripts also create/delete the needed udev rules.
|
||||
Detailed information on some parameters are in the
|
||||
"Device Drivers, Features and Commands" for this release.
|
||||
|
||||
General parameters
|
||||
channel numbers are with lower letters
|
||||
parameters switching things on or off are
|
||||
1 for on and 0 for off
|
||||
|
||||
* ctc_configure
|
||||
Usage: /usr/sbin/ctc_configure <read channel> <write channel> <online> [<protocol>]
|
||||
To configure CTC connections
|
||||
Valid Parameters for the protocal are 0, 1 and 3
|
||||
For a detailed explanation please look in the Device Driver book
|
||||
|
||||
* dasd_configure
|
||||
Usage: dasd_configure <ccwid> <online> <use_diag>
|
||||
To set DASDs online/offline
|
||||
The use_diag makes only sense under z/VM. In an
|
||||
LPAR just set it to 0
|
||||
|
||||
* iucv_configure
|
||||
Usage: /usr/sbin/iucv_configure <router> <online>
|
||||
To set an IUCV IP-network online/offline
|
||||
|
||||
* qeth_configure
|
||||
Usage: /usr/sbin/qeth_configure [options] <read chan> <write chan> <control chan> <online>
|
||||
Set qeth, hipersocket adapter online/offline.
|
||||
options could be one of the following:
|
||||
|
||||
-i Configure IP takeover
|
||||
-l Configure Layer2 support
|
||||
-p NAME QETH Portname to use
|
||||
-n 1/0 QETH port number to use
|
||||
|
||||
|
||||
* zfcp_disk_configure
|
||||
Usage: /usr/sbin/zfcp_disk_configure <ccwid> <wwpn> <lun> <online>
|
||||
set a disk online/offline. This require that the repective
|
||||
Adapter is online. See command below.
|
||||
|
||||
* zfcp_host_configure
|
||||
Usage: /usr/sbin/zfcp_host_configure <ccwid> <online>
|
||||
Set a zfcp Adapter online/offline
|
57
README.SUSE.suse
Normal file
57
README.SUSE.suse
Normal file
@ -0,0 +1,57 @@
|
||||
|
||||
ls - Addons by SUSE
|
||||
|
||||
The following utility and its man page have been added to make it
|
||||
easier to determine the machine type on which Linux is running.
|
||||
|
||||
* cputype
|
||||
Usage: cputype
|
||||
|
||||
The following utilities and their man pages have been added by SUSE to
|
||||
ease the activation and deactivation of devices. These scripts are also
|
||||
used by YaST. Functionality not provided by these scripts cannot be
|
||||
provided by YaST.
|
||||
These scripts also create/delete the needed udev rules.
|
||||
Detailed information on some parameters are in the
|
||||
"Device Drivers, Features and Commands" for this release.
|
||||
|
||||
General parameters
|
||||
channel numbers are with lower letters
|
||||
parameters switching things on or off are
|
||||
1 for on and 0 for off
|
||||
|
||||
* ctc_configure
|
||||
Usage: /sbin/ctc_configure <read channel> <write channel> <online> [<protocol>]
|
||||
To configure CTC connections
|
||||
Valid Parameters for the protocal are 0, 1 and 3
|
||||
For a detailed explanation please look in the Device Driver book
|
||||
|
||||
* dasd_configure
|
||||
Usage: dasd_configure <ccwid> <online> <use_diag>
|
||||
To set DASDs online/offline
|
||||
The use_diag makes only sense under z/VM. In an
|
||||
LPAR just set it to 0
|
||||
|
||||
* iucv_configure
|
||||
Usage: /sbin/iucv_configure <router> <online>
|
||||
To set an IUCV IP-network online/offline
|
||||
|
||||
* qeth_configure
|
||||
Usage: /sbin/qeth_configure [options] <read chan> <write chan> <control chan> <online>
|
||||
Set qeth, hipersocket adapter online/offline.
|
||||
options could be one of the following:
|
||||
|
||||
-i Configure IP takeover
|
||||
-l Configure Layer2 support
|
||||
-p NAME QETH Portname to use
|
||||
-n 1/0 QETH port number to use
|
||||
|
||||
|
||||
* zfcp_disk_configure
|
||||
Usage: /sbin/zfcp_disk_configure <ccwid> <wwpn> <lun> <online>
|
||||
set a disk online/offline. This require that the repective
|
||||
Adapter is online. See command below.
|
||||
|
||||
* zfcp_host_configure
|
||||
Usage: /sbin/zfcp_host_configure <ccwid> <online>
|
||||
Set a zfcp Adapter online/offline
|
8
_service
Normal file
8
_service
Normal file
@ -0,0 +1,8 @@
|
||||
<services>
|
||||
<service name="cargo_vendor" mode="manual">
|
||||
<param name="srctar">s390-tools-2.29.0.tar.gz</param>
|
||||
<param name="compression">zst</param>
|
||||
<param name="update">true</param>
|
||||
</service>
|
||||
<service name="cargo_audit" mode="manual" />
|
||||
</services>
|
126
appldata
Normal file
126
appldata
Normal file
@ -0,0 +1,126 @@
|
||||
#!/bin/sh
|
||||
# Copyright (c) 2003 SUSE LINUX AG Nuernberg, Germany.
|
||||
#
|
||||
# Submit feedback to http://www.suse.de/feedback/
|
||||
|
||||
# Local settings
|
||||
LOCKFILE=/var/lock/appldata
|
||||
CONFIGFILE=/etc/sysconfig/appldata
|
||||
|
||||
# Source config file
|
||||
if [ -f $CONFIGFILE ]; then
|
||||
. $CONFIGFILE
|
||||
else
|
||||
echo "No config file found (should be $CONFIGFILE)."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
RETVAL=0
|
||||
|
||||
start() {
|
||||
echo "Starting \"Linux - z/VM Monitor Stream\" ..."
|
||||
echo -n "(interval $APPLDATA_INTERVAL milliseconds) "
|
||||
echo $APPLDATA_INTERVAL > /proc/sys/appldata/interval
|
||||
if [ "$APPLDATA_MEM" = "yes" ]; then
|
||||
if [ ! -e /proc/sys/appldata/mem ]; then
|
||||
echo -n "(mem) "
|
||||
modprobe appldata_mem 2>&1
|
||||
if [ "$?" -ne 0 ] ; then
|
||||
exit 1
|
||||
else
|
||||
echo 1 > /proc/sys/appldata/mem
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
if [ "$APPLDATA_OS" = "yes" ]; then
|
||||
if [ ! -e /proc/sys/appldata/os ]; then
|
||||
echo -n "(os) "
|
||||
modprobe appldata_os 2>&1
|
||||
if [ "$?" -ne 0 ]; then
|
||||
exit 1
|
||||
else
|
||||
echo 1 > /proc/sys/appldata/os
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
if [ "$APPLDATA_NET_SUM" = "yes" ]; then
|
||||
if [ ! -e /proc/sys/appldata/net_sum ]; then
|
||||
echo -n "(net_sum) "
|
||||
modprobe appldata_net_sum 2>&1
|
||||
if [ "$?" -ne 0 ]; then
|
||||
exit 1
|
||||
else
|
||||
echo 1 > /proc/sys/appldata/net_sum
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
echo -n "(timer)"
|
||||
echo 1 > /proc/sys/appldata/timer
|
||||
touch $LOCKFILE
|
||||
}
|
||||
|
||||
stop() {
|
||||
echo -n "Stopping \"Linux - z/VM Monitor Stream\" "
|
||||
echo -n "(timer"
|
||||
echo 0 > /proc/sys/appldata/timer
|
||||
if [ -e /proc/sys/appldata/mem ]; then
|
||||
echo -n ",mem"
|
||||
echo 0 > /proc/sys/appldata/mem
|
||||
rmmod appldata_mem
|
||||
fi
|
||||
if [ -e /proc/sys/appldata/os ]; then
|
||||
echo -n ",os"
|
||||
echo 0 > /proc/sys/appldata/os
|
||||
rmmod appldata_os
|
||||
fi
|
||||
if [ -e /proc/sys/appldata/net_sum ]; then
|
||||
echo -n ",net_sum"
|
||||
echo 0 > /proc/sys/appldata/net_sum
|
||||
rmmod appldata_net_sum
|
||||
fi
|
||||
echo -n ")"
|
||||
rm -f $LOCKFILE
|
||||
}
|
||||
|
||||
status() {
|
||||
echo "\"Linux - z/VM Monitor Stream\" status..."
|
||||
echo -n "interval "
|
||||
cat /proc/sys/appldata/interval
|
||||
echo -n "timer "
|
||||
cat /proc/sys/appldata/timer
|
||||
echo -n "mem "
|
||||
if [ -e /proc/sys/appldata/mem ]; then
|
||||
cat /proc/sys/appldata/mem
|
||||
else
|
||||
echo 0
|
||||
fi
|
||||
echo -n "os "
|
||||
if [ -e /proc/sys/appldata/os ]; then
|
||||
cat /proc/sys/appldata/os
|
||||
else
|
||||
echo 0
|
||||
fi
|
||||
echo -n "net_sum "
|
||||
if [ -e /proc/sys/appldata/net_sum ]; then
|
||||
cat /proc/sys/appldata/net_sum
|
||||
else
|
||||
echo 0
|
||||
fi
|
||||
}
|
||||
|
||||
# How are we called?
|
||||
case "$1" in
|
||||
start)
|
||||
start
|
||||
;;
|
||||
stop)
|
||||
stop
|
||||
;;
|
||||
status)
|
||||
status
|
||||
;;
|
||||
*)
|
||||
RETVAL=1
|
||||
esac
|
||||
|
||||
exit $RETVAL
|
17
appldata.service
Normal file
17
appldata.service
Normal file
@ -0,0 +1,17 @@
|
||||
[Unit]
|
||||
Description=Linux - z/VM Monitor Stream
|
||||
After=network-online.target remote-fs.target
|
||||
Wants=network-online.target remote-fs.target
|
||||
ConditionPathExists=/proc/sys/appldata/interval
|
||||
ConditionPathExists=!/var/lock/appldata
|
||||
|
||||
[Service]
|
||||
Type=oneshot
|
||||
RemainAfterExit=yes
|
||||
|
||||
ExecStart=/usr/lib/systemd/scripts/appldata start
|
||||
ExecStartPost=/usr/lib/systemd/scripts/appldata status
|
||||
ExecStop=/usr/lib/systemd/scripts/appldata stop
|
||||
|
||||
[Install]
|
||||
WantedBy=default.target
|
5
cargo_config
Normal file
5
cargo_config
Normal file
@ -0,0 +1,5 @@
|
||||
[source.crates-io]
|
||||
replace-with = "vendored-sources"
|
||||
|
||||
[source.vendored-sources]
|
||||
directory = "vendor/"
|
13
cio_ignore.service
Normal file
13
cio_ignore.service
Normal file
@ -0,0 +1,13 @@
|
||||
[Unit]
|
||||
Description=Setup devices for cio_ignore
|
||||
DefaultDependencies=no
|
||||
Before=local-fs.target
|
||||
ConditionKernelCommandLine=cio_ignore
|
||||
|
||||
[Service]
|
||||
Type=oneshot
|
||||
RemainAfterExit=yes
|
||||
ExecStart=/usr/lib/systemd/scripts/setup_cio_ignore.sh
|
||||
|
||||
[Install]
|
||||
WantedBy=sysinit.target
|
73
cputype
Normal file
73
cputype
Normal file
@ -0,0 +1,73 @@
|
||||
#!/bin/sh
|
||||
#
|
||||
# cputype
|
||||
#
|
||||
# Copyright (c) 2014-2017, 2019, 2023 SUSE LINUX GmbH, Nuernberg, Germany.
|
||||
#
|
||||
# Based on the IBM machine model, returns a (hopefully) human understandable
|
||||
# string that identifies the processor.
|
||||
#
|
||||
# Usage:
|
||||
# cputype
|
||||
#
|
||||
# Return values:
|
||||
# 1 The script was executed on a system that is a non-IBM mainframe
|
||||
# architecture
|
||||
# 2 The search for the machine type in /proc/cpuinfo returned a null string
|
||||
# 3 The parsing of the machine type returned a null string
|
||||
# 4 The machine type found is (probably) a new one, and the script needs to
|
||||
# be updated to handle it.
|
||||
#
|
||||
|
||||
architecture=$(/bin/uname -m)
|
||||
if [ "${architecture}" != "s390x" -a "${architecture}" != "s390" ]; then
|
||||
echo "This command is only useful on IBM mainframes." >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
args=$(/usr/bin/grep machine /proc/cpuinfo | awk '{print $11}' )
|
||||
|
||||
if [ -z "${args}" ]; then
|
||||
echo "I couldn't find the machine type. Please report a bug with this output:" >&2
|
||||
/bin/cat /proc/cpuinfo >&2
|
||||
echo "******************" >&2
|
||||
/usr/bin/grep machine /proc/cpuinfo >&2
|
||||
exit 2
|
||||
fi
|
||||
|
||||
machine=${args:0:4}
|
||||
|
||||
if [ -z "${machine}" ] ; then
|
||||
echo "The machine type came out null. Please report a bug with this output:" >&2
|
||||
/bin/cat /proc/cpuinfo >&2
|
||||
exit 3
|
||||
fi
|
||||
|
||||
case "${machine}" in
|
||||
2064) echo "${machine} = z900 IBM eServer zSeries 900" ;;
|
||||
2066) echo "${machine} = z800 IBM eServer zSeries 800" ;;
|
||||
2084) echo "${machine} = z990 IBM eServer zSeries 990" ;;
|
||||
2086) echo "${machine} = z890 IBM eServer zSeries 890" ;;
|
||||
2094) echo "${machine} = z9-EC IBM System z9 Enterprise Class" ;;
|
||||
2096) echo "${machine} = z9-BC IBM System z9 Business Class" ;;
|
||||
2097) echo "${machine} = z10-EC IBM System z10 Enterprise Class" ;;
|
||||
2098) echo "${machine} = z10-BC IBM System z10 Business Class" ;;
|
||||
2817) echo "${machine} = z196 IBM zEnterprise 196" ;;
|
||||
2818) echo "${machine} = z114 IBM zEnterprise 114" ;;
|
||||
2827) echo "${machine} = z12-EC IBM zEnterprise EC12" ;;
|
||||
2828) echo "${machine} = z12-BC IBM zEnterprise BC12" ;;
|
||||
2964) echo "${machine} = z13 IBM z13" ;;
|
||||
2965) echo "${machine} = z13s IBM z13s (single frame)" ;;
|
||||
3906) echo "${machine} = z14 IBM z14" ;;
|
||||
3907) echo "${machine} = z14 ZR1 IBM z14 ZR1" ;;
|
||||
8561) echo "${machine} = z15 T01 IBM z15 T01" ;;
|
||||
8562) echo "${machine} = z15 T02 IBM z15 T02" ;;
|
||||
3931) echo "${machine} = z16 A01 IBM z16 A01" ;;
|
||||
3932) echo "${machine} = z16 A02 IBM z16 A02" ;;
|
||||
*) echo "An unknown machine type was reported: ${machine}" >&2
|
||||
echo "Please file a bug report with this output:" >&2
|
||||
/bin/cat /proc/cpuinfo >&2
|
||||
exit 4
|
||||
;;
|
||||
esac
|
||||
|
50
cputype.1
Normal file
50
cputype.1
Normal file
@ -0,0 +1,50 @@
|
||||
.TH cputype 1 "April 2014" "s390-tools"
|
||||
.SH NAME
|
||||
cputype \- Based on the IBM machine model, returns a (hopefully) human understandable string that identifies the processor.
|
||||
.SH SYNOPSIS
|
||||
.B cputype
|
||||
.SH DESCRIPTION
|
||||
.B cputype
|
||||
is intended to make it easy to find out the type of the mainframe system in use, by examining /proc/cpuinfo and converting that to the name typically known by people familiar with the IBM mainframe.
|
||||
.SH PARAMETERS
|
||||
.IP None
|
||||
.SH FILES
|
||||
.I /proc/cpuinfo
|
||||
.RS
|
||||
Read to determine the IBM machine model for the running system.
|
||||
.RE
|
||||
.SH DIAGNOSTICS
|
||||
The following messages may be issued on stderr:
|
||||
.IP
|
||||
.B This command is only useful on IBM mainframes.
|
||||
.RS
|
||||
The command was executed on a system that is running on a non-IBM mainframe architecture.
|
||||
Return code 1 is set.
|
||||
.RE
|
||||
.IP
|
||||
.B I couldn't find the machine type. Please report a bug with this output:
|
||||
.RS
|
||||
The contents of /proc/cpuinfo are printed as well as the output from the grep command used.
|
||||
Return code 2 is set.
|
||||
.RE
|
||||
.IP
|
||||
.B The machine type came out null. Please report a bug with this output:
|
||||
.RS
|
||||
The contents of /proc/cpuinfo are printed. Return code 3 is set.
|
||||
.RE
|
||||
.IP
|
||||
.B An unknown machine type was reported: mmmm
|
||||
.RS
|
||||
.B Please file a bug report with this output:
|
||||
.RE
|
||||
.RS
|
||||
This is most likely seen because the command was run on a newer generation processor
|
||||
and the script has not been updated with the new model number.
|
||||
The contents of /proc/cpuinfo are printed. Return code 4 is set.
|
||||
.RE
|
||||
.SH Author
|
||||
Mark Post (mpost@suse.com)
|
||||
.SH Copyright
|
||||
Copyright (c) 2014 SUSE LINUX Products GmbH, Nuernberg, Germany.
|
||||
.SH BUGS
|
||||
Gotta be some, I'm sure. If you find one, please open a bug report.
|
114
ctc_configure
Normal file
114
ctc_configure
Normal file
@ -0,0 +1,114 @@
|
||||
#! /bin/sh
|
||||
#
|
||||
# ctc_configure
|
||||
#
|
||||
# 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.
|
||||
# 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.
|
||||
# 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.
|
||||
#
|
||||
# Return values:
|
||||
# Return codes are determined by the chzdev command.
|
||||
#
|
||||
|
||||
mesg () {
|
||||
echo "$@"
|
||||
}
|
||||
|
||||
debug_mesg () {
|
||||
case "${DEBUG}" in
|
||||
yes) mesg "$@" ;;
|
||||
*) ;;
|
||||
esac
|
||||
}
|
||||
|
||||
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 [ "${DEBUG}" != "yes" ]; then
|
||||
DEBUG="no"
|
||||
fi
|
||||
|
||||
DATE=$(date)
|
||||
|
||||
CTC_READ_CHAN=${1}
|
||||
CTC_WRITE_CHAN=${2}
|
||||
ON_OFF=${3}
|
||||
CTC_MODE=${4}
|
||||
|
||||
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
|
||||
|
||||
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
|
||||
|
||||
PARM_LIST=""
|
||||
if [ "${CU_TYPE}" == "3088/01" ] || [ "${CU_TYPE}" == "3088/60" ]; then
|
||||
DEV_TYPE="lcs"
|
||||
else DEV_TYPE="ctc"
|
||||
if [ -z "${CTC_MODE}" ]; then
|
||||
PARM_LIST="${PARM_LIST} protocol=0"
|
||||
else PARM_LIST="${PARM_LIST} protocol=${CTC_MODE}"
|
||||
fi
|
||||
fi
|
||||
|
||||
if [ "${ON_OFF}" == 0 ]; then
|
||||
debug_mesg "chzdev -d ${DEV_TYPE} --no-root-update ${CTC_READ_CHAN}"
|
||||
chzdev -d ${DEV_TYPE} --no-root-update ${CTC_READ_CHAN}
|
||||
elif [ "${ON_OFF}" == 1 ]; then
|
||||
debug_mesg "chzdev -e ${DEV_TYPE} --no-root-update ${CTC_READ_CHAN} ${PARM_LIST}"
|
||||
chzdev -e ${DEV_TYPE} --no-root-update ${CTC_READ_CHAN} ${PARM_LIST}
|
||||
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
|
155
ctc_configure.8
Normal file
155
ctc_configure.8
Normal file
@ -0,0 +1,155 @@
|
||||
.TH ctc_configure "8" "July 2013" "s390-tools"
|
||||
.SH NAME
|
||||
ctc_configure \- Configures or deconfigures a Channel-to-Channel adapter (CTC) or LAN Channel Station adapter (LCS)
|
||||
.SH SYNOPSIS
|
||||
.B ctc_configure read_channel write_channel online [protocol]
|
||||
.SH DESCRIPTION
|
||||
.B ctc_configure
|
||||
is intended to make it easy to persistently add and remove IBM CTC and LCS adapters. In addition to bringing the adapter online or offline, it will also create or delete the necessary udev rules for the adapter.
|
||||
.SH PARAMETERS
|
||||
.IP read_channel
|
||||
The device number of the read channel of the adapter. Takes the form x.y.ssss.
|
||||
.IP write_channel
|
||||
The device number of the write channel of the adapter.Takes the form x.y.ssss.
|
||||
.RS
|
||||
|
||||
where
|
||||
.RS
|
||||
.B x
|
||||
is always 0 until IBM creates something that uses that number.
|
||||
.RE
|
||||
.RS
|
||||
.B y
|
||||
is the logical channel subsystem (lcss) number. Most often this is 0, but it could be non-zero.
|
||||
.RE
|
||||
.RS
|
||||
.B ssss
|
||||
is the four digit subchannel address of the device, in hexidecimal, with leading zeros. If entered in upper/mixed case, this is automatically converted to lower case.
|
||||
.RE
|
||||
.RE
|
||||
.RS
|
||||
|
||||
Keep in mind that for a CTC, the read channel needs to be coupled to the write channel of the peer, and vice versa. This does not apply to LCS adapters.
|
||||
.RE
|
||||
.RE
|
||||
.IP online
|
||||
Either a literal 1 to bring the adapter online or a literal 0 to take it offline
|
||||
.IP protocol
|
||||
.RS
|
||||
0 Compatibility with peers other than OS/390®, or z/OS, for example, a z/VM TCP service machine. This is the default.
|
||||
.RE
|
||||
.RS
|
||||
1 Enhanced package checking for Linux peers.
|
||||
.RE
|
||||
.RS
|
||||
3 For compatibility with OS/390 or z/OS peers.
|
||||
.RE
|
||||
.RS
|
||||
4 For MPC connections to VTAM on traditional mainframe operating systems.
|
||||
.RE
|
||||
.RS
|
||||
|
||||
Not needed for LCS adapters.
|
||||
.SH FILES
|
||||
.I /etc/udev/rules.d/51-ctcm-<ccwid>.rules
|
||||
.RE
|
||||
.I /etc/udev/rules.d/51-lcs-<ccwid>.rules
|
||||
.RS
|
||||
These files provide the udev rules necessary to activate a specific CTC or LCS.
|
||||
.RE
|
||||
.SH ENVIRONMENT
|
||||
.IP DEBUG
|
||||
If set to "yes" some minimal debugging information is output during execution.
|
||||
.SH DIAGNOSTICS
|
||||
The following messages may be issued on stdout:
|
||||
.IP
|
||||
.B /sysfs not present
|
||||
.RS
|
||||
The sysfs file system could not be found in /proc/mounts, so there's nothing the script can
|
||||
do. Return code 1 is set.
|
||||
.RE
|
||||
.IP
|
||||
.B Invalid device status ${ONLINE}
|
||||
.RS
|
||||
A value other than 0 or 1 was specified for the third parameter, online. Return code 2 is set.
|
||||
.RE
|
||||
.IP
|
||||
.B Device ${CTC_READ_CHAN} does not exist
|
||||
.RS
|
||||
A non-existent <ccwid> was specified for the first parameter. Remember the x.y.ssss format is necessary. Return code 3 is set.
|
||||
.RE
|
||||
.IP
|
||||
.B Device ${CTC_READ_CHAN} does not exist
|
||||
.RS
|
||||
A non-existent <ccwid> was specified for the second parameter. Remember the x.y.ssss format is necessary. Return code 4 is set.
|
||||
.RE
|
||||
.IP
|
||||
.B Not a valid CTC device (cu ${_cutype}, dev ${_devtype})
|
||||
.RS
|
||||
The device number specified does not correspond to a valid CTC or LCS device type. Return code 5 is st.
|
||||
.RE
|
||||
.IP
|
||||
.B CTC type mismatch (read: ${tmp_chan}, write: ${CCW_CHAN_GROUP})
|
||||
.RS
|
||||
The device number specified for the read channel has a different device type than the device number specified for the write channel. Return code 6 is set.
|
||||
.RE
|
||||
.IP
|
||||
.B Could not load module ${CCW_CHAN_GROUP}
|
||||
.RS
|
||||
The kernel module for the device type failed to load. Try "dmesg" to see if there is any indication why. Return code 7 is set.
|
||||
.RE
|
||||
.IP
|
||||
.B CCW devices grouped to different devices
|
||||
.RS
|
||||
The read and write channels are already grouped, but not within the same interface. Try again with different devices. Return code 8 is set.
|
||||
.RE
|
||||
.IP
|
||||
.B Could not group ${CCW_CHAN_GROUP} devices ${CTC_READ_CHAN}/${CTC_WRITE_CHAN}
|
||||
.RS
|
||||
The attempt to group the read and write channels into an interface failed. Try "dmesg" to see if there is any indication why. Return code 9 is set.
|
||||
.RE
|
||||
.IP
|
||||
.B Could not set device ${CCW_CHAN_ID} online
|
||||
.RS
|
||||
The attempt to bring the grouped devices online failed. Try "dmesg" to see if there is any indication why. Return code 10 is set.
|
||||
.RE
|
||||
.IP
|
||||
.B Could not set device ${CCW_CHAN_ID} offline
|
||||
.RS
|
||||
The attempt to take the grouped devices offline failed. Try "dmesg" to see if there is any indication why. Return code 11 is set.
|
||||
.RE
|
||||
|
||||
If environment variable DEBUG is set to "yes," the following messages may be issued on stdout:
|
||||
.IP
|
||||
.B
|
||||
Configuring CTC/LCS device ${CTC_READ_CHAN}/${CTC_WRITE_CHAN}
|
||||
.RS
|
||||
Just a little bit of verbosity, since it just indicates that we got past certain error checks and will now try to do something useful.
|
||||
.RE
|
||||
.IP
|
||||
.B Group is ${_ccw_groupdir}/drivers/${CCW_CHAN_GROUP}/group
|
||||
.RS
|
||||
Just a little bit of verbosity.
|
||||
.RE
|
||||
.IP
|
||||
.B Setting device online
|
||||
.RS
|
||||
Just a little bit of verbosity.
|
||||
.RE
|
||||
.IP
|
||||
.B Device ${CCW_CHAN_ID} is already online
|
||||
.RS
|
||||
An attempt was made to bring the adapter online when it was already online.
|
||||
.RE
|
||||
.IP
|
||||
.B Setting device offline
|
||||
.RS
|
||||
Just a little bit of verbosity.
|
||||
.RE
|
||||
.IP
|
||||
.B Device ${CCW_CHAN_ID} is already offline
|
||||
.RS
|
||||
An attempt was made to take the adapter offline when it was already offline.
|
||||
.RE
|
||||
.SH BUGS
|
||||
Gotta be some, I'm sure. If you find one, please open a bug report.
|
60
dasd_configure.8
Normal file
60
dasd_configure.8
Normal file
@ -0,0 +1,60 @@
|
||||
.TH dasd_configure "8" "February 2013" "s390-tools"
|
||||
.SH NAME
|
||||
dasd_configure \- Configures or deconfigures a Direct Access Storage Device (DASD) volume.
|
||||
.SH SYNOPSIS
|
||||
.B dasd_configure [-f -t dasd_type ] ccwid online [use_diag]
|
||||
.SH DESCRIPTION
|
||||
.B dasd_configure
|
||||
is intended to make it easy to persistently add and remove DASD volumes. In addition to bringing the volume online or offline, it will also create or delete the necessary udev rules for the volume.
|
||||
.SH PARAMETERS
|
||||
.IP -f
|
||||
Force creation of udev rules, do not check values in /sys.
|
||||
.IP -t
|
||||
Must be either dasd-eckd or dasd-fba. Must be provided if -f is used.
|
||||
.IP ccwid
|
||||
The device number of the DASD volume. Takes the form x.y.ssss where
|
||||
.RS
|
||||
.B x
|
||||
is always 0 until IBM creates something that uses that number.
|
||||
.RE
|
||||
.RS
|
||||
.B y
|
||||
is the subchannel set ID (SSID). Most often this is 0, but it could be non-zero.
|
||||
.RE
|
||||
.RS
|
||||
.B ssss
|
||||
is the four digit device address of the subchannel, in hexidecimal, with leading zeros. If entered in upper/mixed case, this is automatically converted to lower case.
|
||||
.RE
|
||||
.IP online
|
||||
Either a literal 1 to bring the volume online or a literal 0 to take it offline
|
||||
.RE
|
||||
.IP use_diag
|
||||
Either a literal 1 to use the DIAG driver for this device, or a literal 0 to use the "normal" driver.
|
||||
.RE
|
||||
.SH FILES
|
||||
Please see the documentation of
|
||||
.B chzdev.
|
||||
.SH ENVIRONMENT
|
||||
.IP DEBUG
|
||||
If set to "yes" some minimal debugging information is output during execution.
|
||||
.SH DIAGNOSTICS
|
||||
Messages and return codes are determined by the
|
||||
.B chzdev
|
||||
command.
|
||||
Except for:
|
||||
.IP
|
||||
.B Device ${CCW_CHAN_ID} is unformatted
|
||||
.RS
|
||||
The DASD volume was brought online, but it has not been formatted with dasdfmt. This condition is really only important for YaST to determine if it should prompt the user to decide if they want to format it or not at that point. Return code 8 is set.
|
||||
.RE
|
||||
|
||||
If environment variable DEBUG is set to "yes," it shows the command line of the invoked
|
||||
.B chzdev.
|
||||
Additionally, the following messages may be issued on stdout:
|
||||
.IP
|
||||
.B DASD ${CCW_CHAN_ID} did not come online.
|
||||
.RS
|
||||
The DASD volume did not come online within the waiting time. Could not check if the DASD is formatted (see above). Return code 17 is set.
|
||||
.RE
|
||||
.SH BUGS
|
||||
Gotta be some, I'm sure. If you find one, please open a bug report.
|
160
dasd_configure.opensuse
Normal file
160
dasd_configure.opensuse
Normal file
@ -0,0 +1,160 @@
|
||||
#! /bin/sh
|
||||
#
|
||||
# dasd_configure
|
||||
#
|
||||
# Copyright (c) 2017 SUSE LINUX GmbH, Nuernberg, Germany.
|
||||
#
|
||||
# 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 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 subchannel set ID (SSID). Most often
|
||||
# this is 0, but it could be non-zero
|
||||
# ssss is the four digit device address of the subchannel, 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:
|
||||
# Return codes are determined by the chzdev command, with one exception: If a
|
||||
# DASD volume is not formatted, we will issue a return code of 8.
|
||||
#
|
||||
|
||||
mesg () {
|
||||
echo "$@"
|
||||
}
|
||||
|
||||
debug_mesg () {
|
||||
case "${DEBUG}" in
|
||||
yes) mesg "$@" ;;
|
||||
*) ;;
|
||||
esac
|
||||
}
|
||||
|
||||
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 subchannel set ID (SSID). Most often"
|
||||
echo " this is 0, but it could be non-zero"
|
||||
echo " ssss is the four digit device address of the subchannel, 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"
|
||||
}
|
||||
|
||||
if [ "${DEBUG}" != "yes" ]; then
|
||||
DEBUG="no"
|
||||
fi
|
||||
|
||||
DATE=$(date)
|
||||
|
||||
DASD_FORCE=0
|
||||
|
||||
############################################################
|
||||
# Parse the parameters from the command line
|
||||
#
|
||||
ARGS=$(getopt --options ft: -n "dasd_configure" -- "$@")
|
||||
if [ $? != 0 ] ; then echo "Terminating..." >&2 ; exit 1 ; fi
|
||||
|
||||
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
|
||||
|
||||
if [ -n "${USE_DIAG}" ]; then
|
||||
PARM_LIST="${PARM_LIST} use_diag=${USE_DIAG}"
|
||||
else PARM_LIST="${PARM_LIST} use_diag=0"
|
||||
fi
|
||||
|
||||
if [ "${ON_OFF}" == 0 ]; then
|
||||
debug_mesg "chzdev -d dasd --no-root-update ${CCW_CHAN_ID}"
|
||||
chzdev -d dasd --no-root-update ${CCW_CHAN_ID}
|
||||
elif [ "${ON_OFF}" == 1 ]; then
|
||||
debug_mesg "chzdev -e dasd --no-root-update ${CCW_CHAN_ID} ${PARM_LIST}"
|
||||
chzdev -e dasd --no-root-update ${CCW_CHAN_ID} ${PARM_LIST}
|
||||
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}
|
||||
elif [ ${ON_OFF} == 1 ]; then
|
||||
exitcode=0
|
||||
# Extract the full busid so that we can reference the proper entries in /sys
|
||||
BUSID=$(/usr/sbin/lszdev dasd ${CCW_CHAN_ID} | /usr/bin/sed -e 1d | /usr/bin/tr -s " " | /usr/bin/cut -f2 -d" " )
|
||||
# Make sure the DASD volume came online
|
||||
for ((counter=0; counter<30; counter++)); do
|
||||
sleep 0.1
|
||||
read online < /sys/bus/ccw/devices/${BUSID}/online
|
||||
if [ ${online} -eq 1 ] ; then
|
||||
break
|
||||
fi
|
||||
done
|
||||
|
||||
if [ ${online} -ne 1 ]; then
|
||||
debug_mesg "DASD ${CCW_CHAN_ID} did not come online."
|
||||
exit 17
|
||||
fi
|
||||
|
||||
# Check to see if the DASD volume is unformatted. If so, let YaST know.
|
||||
read status < /sys/bus/ccw/devices/${BUSID}/status
|
||||
if [ "${status}" == "unformatted" ]; then
|
||||
mesg "DASD ${CCW_CHAN_ID} is unformatted."
|
||||
exitcode=8
|
||||
fi
|
||||
fi
|
||||
|
||||
exit ${exitcode}
|
160
dasd_configure.suse
Normal file
160
dasd_configure.suse
Normal file
@ -0,0 +1,160 @@
|
||||
#! /bin/sh
|
||||
#
|
||||
# dasd_configure
|
||||
#
|
||||
# Copyright (c) 2017 SUSE LINUX GmbH, Nuernberg, Germany.
|
||||
#
|
||||
# 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 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 subchannel set ID (SSID). Most often
|
||||
# this is 0, but it could be non-zero
|
||||
# ssss is the four digit device address of the subchannel, 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:
|
||||
# Return codes are determined by the chzdev command, with one exception: If a
|
||||
# DASD volume is not formatted, we will issue a return code of 8.
|
||||
#
|
||||
|
||||
mesg () {
|
||||
echo "$@"
|
||||
}
|
||||
|
||||
debug_mesg () {
|
||||
case "${DEBUG}" in
|
||||
yes) mesg "$@" ;;
|
||||
*) ;;
|
||||
esac
|
||||
}
|
||||
|
||||
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 subchannel set ID (SSID). Most often"
|
||||
echo " this is 0, but it could be non-zero"
|
||||
echo " ssss is the four digit device address of the subchannel, 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"
|
||||
}
|
||||
|
||||
if [ "${DEBUG}" != "yes" ]; then
|
||||
DEBUG="no"
|
||||
fi
|
||||
|
||||
DATE=$(date)
|
||||
|
||||
DASD_FORCE=0
|
||||
|
||||
############################################################
|
||||
# Parse the parameters from the command line
|
||||
#
|
||||
ARGS=$(getopt --options ft: -n "dasd_configure" -- "$@")
|
||||
if [ $? != 0 ] ; then echo "Terminating..." >&2 ; exit 1 ; fi
|
||||
|
||||
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
|
||||
|
||||
if [ -n "${USE_DIAG}" ]; then
|
||||
PARM_LIST="${PARM_LIST} use_diag=${USE_DIAG}"
|
||||
else PARM_LIST="${PARM_LIST} use_diag=0"
|
||||
fi
|
||||
|
||||
if [ "${ON_OFF}" == 0 ]; then
|
||||
debug_mesg "chzdev -d dasd --no-root-update ${CCW_CHAN_ID}"
|
||||
chzdev -d dasd --no-root-update ${CCW_CHAN_ID}
|
||||
elif [ "${ON_OFF}" == 1 ]; then
|
||||
debug_mesg "chzdev -e dasd --no-root-update ${CCW_CHAN_ID} ${PARM_LIST}"
|
||||
chzdev -e dasd --no-root-update ${CCW_CHAN_ID} ${PARM_LIST}
|
||||
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}
|
||||
elif [ ${ON_OFF} == 1 ]; then
|
||||
exitcode=0
|
||||
# Extract the full busid so that we can reference the proper entries in /sys
|
||||
BUSID=$(/sbin/lszdev dasd ${CCW_CHAN_ID} | /usr/bin/sed -e 1d | /usr/bin/tr -s " " | /usr/bin/cut -f2 -d" " )
|
||||
# Make sure the DASD volume came online
|
||||
for ((counter=0; counter<30; counter++)); do
|
||||
sleep 0.1
|
||||
read online < /sys/bus/ccw/devices/${BUSID}/online
|
||||
if [ ${online} -eq 1 ] ; then
|
||||
break
|
||||
fi
|
||||
done
|
||||
|
||||
if [ ${online} -ne 1 ]; then
|
||||
debug_mesg "DASD ${CCW_CHAN_ID} did not come online."
|
||||
exit 17
|
||||
fi
|
||||
|
||||
# Check to see if the DASD volume is unformatted. If so, let YaST know.
|
||||
read status < /sys/bus/ccw/devices/${BUSID}/status
|
||||
if [ "${status}" == "unformatted" ]; then
|
||||
mesg "DASD ${CCW_CHAN_ID} is unformatted."
|
||||
exitcode=8
|
||||
fi
|
||||
fi
|
||||
|
||||
exit ${exitcode}
|
156
dasd_reload.opensuse
Normal file
156
dasd_reload.opensuse
Normal file
@ -0,0 +1,156 @@
|
||||
#!/bin/sh
|
||||
#
|
||||
# dasd_reload
|
||||
# $Id: dasd_reload,v 1.2 2004/05/26 15:17:09 hare Exp $
|
||||
#
|
||||
# Deconfigures all active DASDs, unloads the modules
|
||||
# and activates the configured DASDs again.
|
||||
# Needed to establish an identical device mapping
|
||||
# in the installation system and in the running system.
|
||||
# All DASD access need to be cancelled prior to running
|
||||
# this script.
|
||||
#
|
||||
# Usage:
|
||||
# dasd_reload
|
||||
#
|
||||
# Return values:
|
||||
# 1 Cannot read /proc/modules
|
||||
# 2 Missing module programs
|
||||
# 3 /sys not mounted
|
||||
# 4 Failure on deactivate DASDs
|
||||
#
|
||||
|
||||
if [ ! -r /proc/modules ]; then
|
||||
echo "Cannot read /proc/modules"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [ ! -x /usr/sbin/rmmod -o ! -x /usr/sbin/modprobe ]; then
|
||||
echo "Missing module programs"
|
||||
exit 2
|
||||
fi
|
||||
|
||||
if [ ! -d /sys/bus ]; then
|
||||
echo "sysfs not mounted"
|
||||
exit 3
|
||||
fi
|
||||
|
||||
let anymd=0
|
||||
if [ -f /proc/mdstat ]; then
|
||||
for mddevice in $(grep active /proc/mdstat | cut -f1 -d:); do
|
||||
mdadm -S /dev/${mddevice}
|
||||
let anymd=1
|
||||
done
|
||||
udevadm settle
|
||||
fi
|
||||
|
||||
#
|
||||
# Setting HyperPAV alias devices offline
|
||||
#
|
||||
dasd_alias=
|
||||
let EXITRC=0
|
||||
for dev in /sys/bus/ccw/devices/*; do
|
||||
if [ -f ${dev}/use_diag ]; then
|
||||
read _online < ${dev}/online
|
||||
read _alias < ${dev}/alias
|
||||
if [ "$_online" -eq 1 -a "$_alias" -eq 1 ]; then
|
||||
echo "setting DASD HyperPAV alias $(basename ${dev}) offline"
|
||||
echo "0" > ${dev}/online
|
||||
read _online < ${dev}/online
|
||||
dasd_alias="${dasd_alias} $(basename ${dev})"
|
||||
if [ "$_online" -eq 1 ]; then
|
||||
echo "failure on setting DASD HyperPAV alias $(basename ${dev}) offline !"
|
||||
let EXITRC=4
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
done
|
||||
|
||||
#
|
||||
# Setting "normal" DASD and HyperPAV base devices offline
|
||||
#
|
||||
dasd_base=
|
||||
for dev in /sys/bus/ccw/devices/*; do
|
||||
if [ -f ${dev}/use_diag ]; then
|
||||
read _online < ${dev}/online
|
||||
read _alias < ${dev}/alias
|
||||
if [ "$_online" -eq 1 -a "$_alias" -eq 0 ]; then
|
||||
echo "setting DASD $(basename ${dev}) offline"
|
||||
echo "0" > ${dev}/online
|
||||
read _online < ${dev}/online
|
||||
dasd_base="${dasd_base} $(basename ${dev})"
|
||||
if [ "$_online" -eq 1 ]; then
|
||||
echo "failure on setting DASD $(basename ${dev}) offline !"
|
||||
let EXITRC=4
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
done
|
||||
|
||||
udevadm settle
|
||||
|
||||
module_list=
|
||||
module_test_list="dasd_diag_mod dasd_eckd_mod dasd_fba_mod dasd_mod"
|
||||
for module in ${module_test_list}; do
|
||||
if grep -q "${module}" /proc/modules; then
|
||||
module_list="${module} ${module_list}"
|
||||
: Unloading ${module}
|
||||
/usr/sbin/rmmod ${module}
|
||||
fi
|
||||
done
|
||||
|
||||
udevadm settle
|
||||
sleep 2
|
||||
|
||||
if [ -d /etc/udev/rules.d ]; then
|
||||
cd /etc/udev/rules.d
|
||||
#
|
||||
# Re-activating "normal" DASD and HyperPAV base devices
|
||||
#
|
||||
# We need to move all the DASD udev rules out from /etc/udev/rules.d
|
||||
# because if we don't, then when the first DASD volume gets brought
|
||||
# back online, they are all brought back online, in a non-deterministic
|
||||
# order, not the numeric order we expect.
|
||||
#
|
||||
mv -i 41-dasd-*.rules 51-dasd-*.rules /tmp
|
||||
cd /tmp
|
||||
for dasd in ${dasd_base}; do
|
||||
for file in 41-dasd-*-${dasd}.rules 51-dasd-${dasd}.rules; do
|
||||
[ -f "${file}" ] || continue
|
||||
#
|
||||
# Special handling is needed for old udev rules that start with 51-
|
||||
# since the chzdev command won't look for that name
|
||||
#
|
||||
prefix="$(echo ${file} | cut -f1 -d-)"
|
||||
if [ "${prefix}" == "51" ]; then
|
||||
if [ -h /sys/bus/ccw/drivers/dasd-eckd/${dasd} ]; then
|
||||
mv -i ${file} 41-dasd-eckd-${dasd}.rules
|
||||
elif [ -h /sys/bus/ccw/drivers/dasd-fba/${dasd} ]; then
|
||||
mv -i ${file} 41-dasd-fba-${dasd}.rules
|
||||
else echo "DASD volume ${dasd} is neither an ECKD or FBA device."
|
||||
let EXITRC=4
|
||||
fi
|
||||
fi
|
||||
echo Activating ${dasd}
|
||||
mv -i "${file}" /etc/udev/rules.d/
|
||||
/usr/sbin/chzdev dasd --apply --configured -q --no-root-update ${dasd}
|
||||
lsdasd
|
||||
break
|
||||
done
|
||||
done
|
||||
|
||||
#
|
||||
# Re-activating HyperPAV alias devices
|
||||
#
|
||||
for dasd in ${dasd_alias}; do
|
||||
for file in 41-dasd-*-${dasd}.rules 51-dasd-${dasd}.rules; do
|
||||
[ -f "${file}" ] || continue
|
||||
echo Activating ${dasd}
|
||||
mv -i "${file}" /etc/udev/rules.d/
|
||||
/usr/sbin/chzdev dasd --apply --configured -q --no-root-update ${dasd}
|
||||
break
|
||||
done
|
||||
done
|
||||
fi
|
||||
|
||||
exit ${EXITRC}
|
156
dasd_reload.suse
Normal file
156
dasd_reload.suse
Normal file
@ -0,0 +1,156 @@
|
||||
#!/bin/sh
|
||||
#
|
||||
# dasd_reload
|
||||
# $Id: dasd_reload,v 1.2 2004/05/26 15:17:09 hare Exp $
|
||||
#
|
||||
# Deconfigures all active DASDs, unloads the modules
|
||||
# and activates the configured DASDs again.
|
||||
# Needed to establish an identical device mapping
|
||||
# in the installation system and in the running system.
|
||||
# All DASD access need to be cancelled prior to running
|
||||
# this script.
|
||||
#
|
||||
# Usage:
|
||||
# dasd_reload
|
||||
#
|
||||
# Return values:
|
||||
# 1 Cannot read /proc/modules
|
||||
# 2 Missing module programs
|
||||
# 3 /sys not mounted
|
||||
# 4 Failure on deactivate DASDs
|
||||
#
|
||||
|
||||
if [ ! -r /proc/modules ]; then
|
||||
echo "Cannot read /proc/modules"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [ ! -x /sbin/rmmod -o ! -x /sbin/modprobe ]; then
|
||||
echo "Missing module programs"
|
||||
exit 2
|
||||
fi
|
||||
|
||||
if [ ! -d /sys/bus ]; then
|
||||
echo "sysfs not mounted"
|
||||
exit 3
|
||||
fi
|
||||
|
||||
let anymd=0
|
||||
if [ -f /proc/mdstat ]; then
|
||||
for mddevice in $(grep active /proc/mdstat | cut -f1 -d:); do
|
||||
mdadm -S /dev/${mddevice}
|
||||
let anymd=1
|
||||
done
|
||||
udevadm settle
|
||||
fi
|
||||
|
||||
#
|
||||
# Setting HyperPAV alias devices offline
|
||||
#
|
||||
dasd_alias=
|
||||
let EXITRC=0
|
||||
for dev in /sys/bus/ccw/devices/*; do
|
||||
if [ -f ${dev}/use_diag ]; then
|
||||
read _online < ${dev}/online
|
||||
read _alias < ${dev}/alias
|
||||
if [ "$_online" -eq 1 -a "$_alias" -eq 1 ]; then
|
||||
echo "setting DASD HyperPAV alias $(basename ${dev}) offline"
|
||||
echo "0" > ${dev}/online
|
||||
read _online < ${dev}/online
|
||||
dasd_alias="${dasd_alias} $(basename ${dev})"
|
||||
if [ "$_online" -eq 1 ]; then
|
||||
echo "failure on setting DASD HyperPAV alias $(basename ${dev}) offline !"
|
||||
let EXITRC=4
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
done
|
||||
|
||||
#
|
||||
# Setting "normal" DASD and HyperPAV base devices offline
|
||||
#
|
||||
dasd_base=
|
||||
for dev in /sys/bus/ccw/devices/*; do
|
||||
if [ -f ${dev}/use_diag ]; then
|
||||
read _online < ${dev}/online
|
||||
read _alias < ${dev}/alias
|
||||
if [ "$_online" -eq 1 -a "$_alias" -eq 0 ]; then
|
||||
echo "setting DASD $(basename ${dev}) offline"
|
||||
echo "0" > ${dev}/online
|
||||
read _online < ${dev}/online
|
||||
dasd_base="${dasd_base} $(basename ${dev})"
|
||||
if [ "$_online" -eq 1 ]; then
|
||||
echo "failure on setting DASD $(basename ${dev}) offline !"
|
||||
let EXITRC=4
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
done
|
||||
|
||||
udevadm settle
|
||||
|
||||
module_list=
|
||||
module_test_list="dasd_diag_mod dasd_eckd_mod dasd_fba_mod dasd_mod"
|
||||
for module in ${module_test_list}; do
|
||||
if grep -q "${module}" /proc/modules; then
|
||||
module_list="${module} ${module_list}"
|
||||
: Unloading ${module}
|
||||
/sbin/rmmod ${module}
|
||||
fi
|
||||
done
|
||||
|
||||
udevadm settle
|
||||
sleep 2
|
||||
|
||||
if [ -d /etc/udev/rules.d ]; then
|
||||
cd /etc/udev/rules.d
|
||||
#
|
||||
# Re-activating "normal" DASD and HyperPAV base devices
|
||||
#
|
||||
# We need to move all the DASD udev rules out from /etc/udev/rules.d
|
||||
# because if we don't, then when the first DASD volume gets brought
|
||||
# back online, they are all brought back online, in a non-deterministic
|
||||
# order, not the numeric order we expect.
|
||||
#
|
||||
mv -i 41-dasd-*.rules 51-dasd-*.rules /tmp
|
||||
cd /tmp
|
||||
for dasd in ${dasd_base}; do
|
||||
for file in 41-dasd-*-${dasd}.rules 51-dasd-${dasd}.rules; do
|
||||
[ -f "${file}" ] || continue
|
||||
#
|
||||
# Special handling is needed for old udev rules that start with 51-
|
||||
# since the chzdev command won't look for that name
|
||||
#
|
||||
prefix="$(echo ${file} | cut -f1 -d-)"
|
||||
if [ "${prefix}" == "51" ]; then
|
||||
if [ -h /sys/bus/ccw/drivers/dasd-eckd/${dasd} ]; then
|
||||
mv -i ${file} 41-dasd-eckd-${dasd}.rules
|
||||
elif [ -h /sys/bus/ccw/drivers/dasd-fba/${dasd} ]; then
|
||||
mv -i ${file} 41-dasd-fba-${dasd}.rules
|
||||
else echo "DASD volume ${dasd} is neither an ECKD or FBA device."
|
||||
let EXITRC=4
|
||||
fi
|
||||
fi
|
||||
echo Activating ${dasd}
|
||||
mv -i "${file}" /etc/udev/rules.d/
|
||||
/sbin/chzdev dasd --apply --configured -q --no-root-update ${dasd}
|
||||
lsdasd
|
||||
break
|
||||
done
|
||||
done
|
||||
|
||||
#
|
||||
# Re-activating HyperPAV alias devices
|
||||
#
|
||||
for dasd in ${dasd_alias}; do
|
||||
for file in 41-dasd-*-${dasd}.rules 51-dasd-${dasd}.rules; do
|
||||
[ -f "${file}" ] || continue
|
||||
echo Activating ${dasd}
|
||||
mv -i "${file}" /etc/udev/rules.d/
|
||||
/sbin/chzdev dasd --apply --configured -q --no-root-update ${dasd}
|
||||
break
|
||||
done
|
||||
done
|
||||
fi
|
||||
|
||||
exit ${EXITRC}
|
20
dasdro
Normal file
20
dasdro
Normal file
@ -0,0 +1,20 @@
|
||||
#!/bin/bash
|
||||
# checks DASD accessibility in VM and sets Linux-side readonly attributes
|
||||
# accordingly
|
||||
|
||||
modprobe -q vmcp
|
||||
|
||||
vmcp q v dasd 2>/dev/null >/dev/null || exit 0 # not running in VM
|
||||
|
||||
vmcp q v dasd | while read x dev rest
|
||||
do
|
||||
dev=`echo $dev|tr A-F a-f`
|
||||
roattr=/sys/bus/ccw/devices/?.?.$dev/readonly
|
||||
test -e $roattr || continue
|
||||
if echo "$rest"|grep -q R/O
|
||||
then
|
||||
echo 1 >$roattr
|
||||
else
|
||||
echo 0 >$roattr
|
||||
fi
|
||||
done
|
157
detach_disks.sh.opensuse
Normal file
157
detach_disks.sh.opensuse
Normal file
@ -0,0 +1,157 @@
|
||||
#!/bin/sh
|
||||
|
||||
DASDFILE=/tmp/dasd.list.$(mcookie)
|
||||
DETFILE=/tmp/detach.disks.$(mcookie)
|
||||
KEEPFILE=/tmp/keep.disks.$(mcookie)
|
||||
NICFILE=/tmp/nic.list.$(mcookie)
|
||||
FAILFILE=/tmp/error.$(mcookie)
|
||||
|
||||
function expand_RANGE(){
|
||||
local RANGE=${1}
|
||||
local RANGE_SAVE=${RANGE}
|
||||
local DEVNO
|
||||
local BEGIN=0
|
||||
local END=0
|
||||
|
||||
RANGE=$(IFS=":-"; echo ${RANGE} | cut -f1-2 -d" " )
|
||||
set -- ${RANGE}
|
||||
let BEGIN=0x$1 2>/dev/null
|
||||
let END=0x$2 2>/dev/null
|
||||
|
||||
if [ ${BEGIN} -eq 0 ] || [ ${END} -eq 0 ]; then
|
||||
${msg} "An invalid device number range was specified: ${RANGE_SAVE}" >&2
|
||||
touch ${FAILFILE}
|
||||
return
|
||||
fi
|
||||
|
||||
for DEVNO in $(eval echo {${BEGIN}..${END}})
|
||||
do printf "%d\n" ${DEVNO}
|
||||
done
|
||||
}
|
||||
|
||||
function usage(){
|
||||
echo "Usage: ${0} [ -F ] [ -q ] [ -h ]"
|
||||
echo " -F Exit with failure if any invalid parms are detected."
|
||||
echo " -q Don't generate any output."
|
||||
echo " -h Display this help message."
|
||||
}
|
||||
|
||||
msg="echo"
|
||||
let FORCE_FAIL=0
|
||||
|
||||
############################################################
|
||||
# Parse the parameters from the command line
|
||||
#
|
||||
ARGS=$(getopt -a --options Fhq -n "detach_devices" -- "$@")
|
||||
if [ $? -ne 0 ]; then
|
||||
usage
|
||||
exit 3
|
||||
fi
|
||||
|
||||
eval set -- "${ARGS}"
|
||||
for ARG; do
|
||||
case "${ARG}" in
|
||||
-F) let FORCE_FAIL=1
|
||||
shift 1
|
||||
;;
|
||||
-h) usage;
|
||||
exit 0
|
||||
;;
|
||||
-q) msg="/bin/true"
|
||||
shift 1
|
||||
;;
|
||||
--) shift 1
|
||||
;;
|
||||
*) ${msg} "Extraneous input detected: ${1}"
|
||||
shift 1
|
||||
;;
|
||||
esac
|
||||
done
|
||||
|
||||
if [ -r /etc/sysconfig/virtsetup ]; then
|
||||
. /etc/sysconfig/virtsetup
|
||||
else ${msg} "No /etc/sysconfig/virtsetup file was found."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# First, get a list of all the DASD devices we have for this guest, in decimal.
|
||||
# (Trying to handle things in hex gets complicated.)
|
||||
/usr/sbin/vmcp -b1048576 q v dasd | cut -f2 -d" " |\
|
||||
while read HEXNO
|
||||
do let DECNO=0x${HEXNO}
|
||||
echo ${DECNO}
|
||||
done > ${DASDFILE} 2>/dev/null
|
||||
|
||||
# If the system administrator specified certain devices to be detached
|
||||
# let's put those device numbers in a file, one per line.
|
||||
touch ${DETFILE}
|
||||
for ADDR in $(IFS=", " ; echo ${ZVM_DISKS_TO_DETACH})
|
||||
do if $(echo ${ADDR} | grep -iqE ":|-" 2>/dev/null)
|
||||
then expand_RANGE ${ADDR} >> ${DETFILE}
|
||||
else let DEVNO=0
|
||||
let DEVNO=0x${ADDR} 2>/dev/null
|
||||
if [ ${DEVNO} -eq 0 ]; then
|
||||
${msg} "An invalid device number was specified: ${ADDR}" >&2
|
||||
touch ${FAILFILE}
|
||||
else printf "%d\n" ${DEVNO}
|
||||
fi
|
||||
fi
|
||||
done > ${DETFILE}
|
||||
|
||||
# If the system administrator specified certain devices that should _not_
|
||||
# be detached, let's put those in another file, one per line.
|
||||
touch ${KEEPFILE}
|
||||
for ADDR in $(IFS=", " ; echo ${ZVM_DISKS_TO_NOT_DETACH})
|
||||
do if $(echo ${ADDR} | grep -iqE ":|-" 2>/dev/null)
|
||||
then expand_RANGE ${ADDR} >> ${KEEPFILE}
|
||||
else let DEVNO=0
|
||||
let DEVNO=0x${ADDR} 2>/dev/null
|
||||
if [ ${DEVNO} -eq 0 ]; then
|
||||
${msg} "An invalid device number was specified: ${ADDR}" >&2
|
||||
touch ${FAILFILE}
|
||||
else printf "%d\n" ${DEVNO}
|
||||
fi
|
||||
fi
|
||||
done > ${KEEPFILE}
|
||||
|
||||
if [ ${FORCE_FAIL} -eq 1 ] && [ -e ${FAILFILE} ]; then
|
||||
let RETURN_CODE=1
|
||||
${msg} "Terminating detach_disk because of input errors."
|
||||
else
|
||||
# If the system administrator specified that all "unused" disks should be
|
||||
# detached, compare the disks lsdasd show as activated to the complete
|
||||
# list of disks we have currently, and add the inactive ones to the
|
||||
# file containing devices to be detached
|
||||
if [ "${ZVM_DETACH_ALL_UNUSED}" == "yes" ]; then
|
||||
lsdasd -s | sed -e 1,2d | cut -f1 -d" " | \
|
||||
while read ADDR
|
||||
do let DEVNO=0x${ADDR}
|
||||
sed -i -e "/^${DEVNO}$/d" ${DASDFILE}
|
||||
done
|
||||
cat ${DASDFILE} >> ${DETFILE}
|
||||
fi
|
||||
|
||||
# Now remove any "to be kept" disks from the detach file
|
||||
while read DEVNO
|
||||
do sed -i -e "/^${DEVNO}/d" ${DETFILE}
|
||||
done < ${KEEPFILE}
|
||||
|
||||
# Get a list of all the virtual NICs since they require an
|
||||
# extra keyword to detach. Contrary to what we've done before
|
||||
# these will be hex values
|
||||
/usr/sbin/vmcp -b1048576 q nic | grep Adapter | cut -f2 -d" " | cut -f1 -d. > ${NICFILE}
|
||||
|
||||
# Now we sort the device numbers and detach them.
|
||||
sort -un ${DETFILE} | \
|
||||
while read DEVNO
|
||||
do HEXNO=$(printf %04X ${DEVNO})
|
||||
if grep -q ^${HEXNO}$ ${NICFILE} 2>/dev/null ; then
|
||||
vmcp detach nic ${HEXNO} 2>/dev/null
|
||||
else vmcp detach ${HEXNO} 2>/dev/null
|
||||
fi
|
||||
done
|
||||
let RETURN_CODE=0
|
||||
fi
|
||||
|
||||
rm -f ${DASDFILE} ${DETFILE} ${KEEPFILE} ${NICFILE} ${FAILFILE}
|
||||
exit ${RETURN_CODE}
|
157
detach_disks.sh.suse
Normal file
157
detach_disks.sh.suse
Normal file