[s390utils] add normalize_dasd_arg script (#823078)

Dan Horák sharkcz at fedoraproject.org
Wed May 23 06:29:45 UTC 2012


commit 8c7c2bc4db958915a688b51771070aef2dab21a5
Author: Dan Horák <dan at danny.cz>
Date:   Wed May 23 08:29:40 2012 +0200

    add normalize_dasd_arg script (#823078)

 normalize_dasd_arg |  112 ++++++++++++++++++++++++++++++++++++++++++++++++++++
 s390utils.spec     |    8 +++-
 2 files changed, 119 insertions(+), 1 deletions(-)
---
diff --git a/normalize_dasd_arg b/normalize_dasd_arg
new file mode 100644
index 0000000..2f622e3
--- /dev/null
+++ b/normalize_dasd_arg
@@ -0,0 +1,112 @@
+#!/bin/sh
+#
+# Copyright 2012 Red Hat, Inc.
+# License: GPLv2
+# Author: Jesse Keating <jkeating at redhat.com>
+#
+# Normalize DASD data into valid dasd.conf format
+#
+# Standard input should be the DASD argument
+# Standard otuput is the properly formatted content
+#
+# it is used in
+#   dracut generated initramfs
+#
+# Much of this code was salvaged from linuxrc.s390 from Anaconda:
+#
+# License GPLv2+
+#
+# Copyright (C) 2000-2004 by                                                    
+#        Bernhard Rosenkraenzer <bero at redhat.com>                               
+#        Oliver Paukstadt <opaukstadt at millenux.com>                             
+#        Karsten Hopp <karsten at redhat.de>                                       
+#        Florian La Roche <laroche at redhat.com>                                  
+#        Nils Philippsen <nils at redhat.de>                                       
+#        Helge Deller <hdeller at redhat.de>                                       
+#        David Sainty <dsainty at redhat.com>                                      
+# Copyright (C) IBM Corp. 2008,2009                                             
+#        Author: Steffen Maier <maier at de.ibm.com>
+
+
+function canonicalize_devno()
+{
+    case ${#1} in
+        3) echo "0.0.0${1}" ;;
+        4) echo "0.0.${1}" ;;
+        *) echo "${1}" ;;
+    esac
+    return 0
+}
+
+read DASD
+for dasditem in $(echo $DASD |sed 's/,/ /g')
+    do
+    unset range features lo hi attrs devno lodevno hidevno devbusid sys
+    case $dasditem in
+        autodetect|probeonly|nopav|nofcx|"") continue ;; # these don't gen a config
+        *)
+            IFS='('
+            read range features <<< "$dasditem"
+            unset IFS
+            lo=${range%%-*}
+            [[ "$lo" =~ (^[[:xdigit:]]+\.[0-3]\.[[:xdigit:]]{4}$)|(^[[:xdigit:]]{3,4}$) ]]
+            case $? in
+                0)  # string matched the pattern
+                    lo=$(canonicalize_devno $lo) ;;
+                1)  # string did not match the pattern
+                    echo $"Incorrect format for lower bound of DASD range $range: $lo"
+                    exit 1
+                    ;;
+                2)  echo "l.$LINENO: syntax error in regex of match operator =~, code needs to be fixed" 1>&2 ;;
+                *)  echo "l.$LINENO: unexpected return code of regex match operator =~, code needs to be fixed" 1>&2 ;;
+            esac
+            if [ "${range//*-*/}" = "" ]; then
+                hi=${range##*-}
+                [[ "$hi" =~ (^[[:xdigit:]]+\.[0-3]\.[[:xdigit:]]{4}$)|(^[[:xdigit:]]{3,4}$) ]]
+                case $? in
+                    0)  # string matched the pattern
+                        hi=$(canonicalize_devno $hi)
+                        if [ "${lo%.*}" != "${hi%.*}" ]; then
+                            echo $"Prefixes of DASD range $range do not match: ${lo%.*} != ${hi%.*}"
+                            exit 1
+                        fi
+                        ;;
+                    1)  # string did not match the pattern
+                        echo $"Incorrect format for upper bound of DASD range $range: $hi"
+                        exit 1
+                        ;;
+                    2)  echo "l.$LINENO: syntax error in regex of match operator =~, code needs to be fixed" 1>&2 ;;
+                    *)  echo "l.$LINENO: unexpected return code of regex match operator =~, code needs to be fixed" 1>&2 ;;
+                esac
+            fi
+            if [ "${features//*)/}" != "" ]; then
+                echo $"Missing closing parenthesis at features of DASD range $range: ($features"
+                exit 1
+            fi
+            if [ -n "$features" ]; then
+                attrs=""
+                features="${features%)}"
+                for feature in $(echo $features |sed 's/:/\n/g'); do
+                    case $feature in
+                        ro) attrs=$attrs" readonly" ;;
+                        diag) attrs=$attrs" use_diag" ;;
+                        erplog|failfast) attrs=$attrs" "$feature ;;
+                        *) echo $"Unknown DASD feature for device range $range: $feature"
+                           exit 1
+                           ;;
+                    esac
+                done
+            fi
+            [ -z "$hi" ] && hi=$lo
+            lodevno=$((0x${lo##*.}))
+            hidevno=$((0x${hi##*.}))
+            for ((devno=$lodevno; $devno <= $hidevno; ++devno)); do
+                devbusid=$(printf "%s.%04x" ${lo%.*} $devno)
+                echo -n "$devbusid"
+                for attr in $attrs; do
+                    echo -n " $attr=1"
+                done
+                echo
+            done
+    esac
+done
diff --git a/s390utils.spec b/s390utils.spec
index 62c5ae4..463d374 100644
--- a/s390utils.spec
+++ b/s390utils.spec
@@ -8,7 +8,7 @@ Name:           s390utils
 Summary:        Utilities and daemons for IBM System/z
 Group:          System Environment/Base
 Version:        1.16.0
-Release:        7%{?dist}
+Release:        8%{?dist}
 Epoch:          2
 License:        GPLv2 and GPLv2+ and CPL
 Buildroot:      %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
@@ -38,6 +38,7 @@ Source17:       ccw.udev
 Source18:       cpuplugd.initd
 Source19:       mon_statd.initd
 Source20:       40-z90crypt.rules
+Source21:       normalize_dasd_arg
 
 Patch1:         s390-tools-1.16.0-fedora.patch
 
@@ -172,6 +173,7 @@ install -p -m 644 %{SOURCE2} $RPM_BUILD_ROOT%{_sysconfdir}/profile.d
 install -p -m 644 %{SOURCE3} $RPM_BUILD_ROOT%{_sysconfdir}/profile.d
 install -p -m 755 %{SOURCE5} $RPM_BUILD_ROOT/sbin
 install -p -m 755 %{SOURCE13} $RPM_BUILD_ROOT/sbin
+install -p -m 755 %{SOURCE21} $RPM_BUILD_ROOT/sbin
 install -p -m 644 %{SOURCE7} $RPM_BUILD_ROOT%{_sysconfdir}/udev/rules.d/56-zfcp.rules
 install -p -m 644 %{SOURCE12} $RPM_BUILD_ROOT%{_sysconfdir}/udev/rules.d/56-dasd.rules
 
@@ -528,6 +530,7 @@ fi
 /sbin/device_cio_free
 /sbin/zfcp_cio_free
 /sbin/znet_cio_free
+/sbin/normalize_dasd_arg
 /lib/systemd/system/device_cio_free.service
 %{_sysconfdir}/systemd/system/sysinit.target.wants/device_cio_free.service
 /lib/udev/ccw_init
@@ -864,6 +867,9 @@ User-space development files for the s390/s390x architecture.
 
 
 %changelog
+* Wed May 23 2012 Dan Horák <dan[at]danny.cz> 2:1.16.0-8
+- add normalize_dasd_arg script (#823078)
+
 * Mon May 14 2012 Dan Horák <dan[at]danny.cz> 2:1.16.0-7
 - ethtool is required by lsqeth (#821421)
 


More information about the scm-commits mailing list