diff options
author | Jesse Keating <jkeating@redhat.com> | 2012-05-24 14:23:34 -0700 |
---|---|---|
committer | Dan Horák <dan@danny.cz> | 2012-05-25 09:00:43 +0200 |
commit | cb3858ea5b14a4c140493d12a818546036c9187e (patch) | |
tree | 9973e26b12002f748501c804f2fac2986bbf593a | |
parent | ff3f09c1d921e53465de490752981a1fcbed5f39 (diff) | |
download | utils-cb3858ea5b14a4c140493d12a818546036c9187e.tar.gz utils-cb3858ea5b14a4c140493d12a818546036c9187e.tar.xz utils-cb3858ea5b14a4c140493d12a818546036c9187e.zip |
Handle multiple DASD formats
Format A from CMSCONFFILE or parm file,
<range>(feature),<range>(feature)
Format B from zipl.conf, <dasd>,feature=N
We have to support and "normalize" both.
-rwxr-xr-x[-rw-r--r--] | normalize_dasd_arg | 146 |
1 files changed, 77 insertions, 69 deletions
diff --git a/normalize_dasd_arg b/normalize_dasd_arg index 2f622e3..c1bd9cf 100644..100755 --- a/normalize_dasd_arg +++ b/normalize_dasd_arg @@ -39,74 +39,82 @@ function canonicalize_devno() } 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%.*}" +# See if we've gotten a format like <dev>,feature or <dev>,<dev>,<dev> +[[ "$DASD" =~ (\,*=[[:digit:]]) ]] +case $? in + # case of 0 is features, just turn the comma into a space + 0) echo $DASD |sed 's/,/ /g';; + *) # We've got no features, do things normally + 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 - 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 - ;; + ;; + 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 - 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 + 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 + ;; +esac |