summaryrefslogtreecommitdiffstats
path: root/modules.d/95znet/parse-ccw.sh
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-06-03 14:01:37 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-06-03 14:01:37 +0000
commit734d725d62d2cbe4445524448de024e3b9e7f4b3 (patch)
tree88d8385f24a0efda248b3480fe39037b85e76552 /modules.d/95znet/parse-ccw.sh
parentReleasing progress-linux version 060+5-8~progress7.99u1. (diff)
downloaddracut-734d725d62d2cbe4445524448de024e3b9e7f4b3.tar.xz
dracut-734d725d62d2cbe4445524448de024e3b9e7f4b3.zip
Merging upstream version 102.
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'modules.d/95znet/parse-ccw.sh')
-rwxr-xr-xmodules.d/95znet/parse-ccw.sh61
1 files changed, 52 insertions, 9 deletions
diff --git a/modules.d/95znet/parse-ccw.sh b/modules.d/95znet/parse-ccw.sh
index d895360..ccf05bc 100755
--- a/modules.d/95znet/parse-ccw.sh
+++ b/modules.d/95znet/parse-ccw.sh
@@ -1,7 +1,50 @@
#!/bin/bash
+znet_base_args="--no-settle --yes --no-root-update --force"
+
+# at this point in time dracut's vinfo() only logs to journal which is hard for
+# s390 users to find and access on a line mode console such as 3215 mode
+# so use a vinfo alternative that still prints to the console via kmsg
+znet_vinfo() {
+ while read -r _znet_vinfo_line || [ -n "$_znet_vinfo_line" ]; do
+ # Prefix "<30>" represents facility LOG_DAEMON 3 and loglevel INFO 6:
+ # (facility << 3) | level.
+ echo "<30>dracut: $_znet_vinfo_line" > /dev/kmsg
+ done
+}
+
for ccw_arg in $(getargs rd.ccw -d 'rd_CCW=') $(getargs rd.znet -d 'rd_ZNET='); do
- echo "$ccw_arg" >> /etc/ccw.conf
+ (
+ SAVED_IFS="$IFS"
+ IFS=","
+ # shellcheck disable=SC2086
+ set -- $ccw_arg
+ IFS="$SAVED_IFS"
+ type="$1"
+ subchannel1="$2"
+ subchannel2="$3"
+ subchannel3="$4"
+ echo "rd.znet ${ccw_arg} :" | znet_vinfo
+ if [ "$#" -lt 3 ]; then
+ echo "rd.znet needs at least 3 list items: type,subchannel1,subchannel2" | znet_vinfo
+ fi
+ if [ "$1" = "qeth" ]; then
+ if [ "$#" -lt 4 ]; then
+ echo "rd.znet for type qeth needs at least 4 list items: qeth,subchannel1,subchannel2,subchannel3" | znet_vinfo
+ fi
+ subchannels="$subchannel1:$subchannel2:$subchannel3"
+ shift 4
+ # shellcheck disable=SC2086
+ chzdev --enable --persistent $znet_base_args \
+ "$type" "$subchannels" "$@" 2>&1 | znet_vinfo
+ else
+ subchannels="$subchannel1:$subchannel2"
+ shift 3
+ # shellcheck disable=SC2086
+ chzdev --enable --persistent $znet_base_args \
+ "$type" "$subchannels" "$@" 2>&1 | znet_vinfo
+ fi
+ )
done
for ifname in $(getargs rd.znet_ifname); do
@@ -10,16 +53,16 @@ for ifname in $(getargs rd.znet_ifname); do
warn "Invalid arguments for rd.znet_ifname="
else
{
- ifname_subchannels=${ifname_subchannels//,/|}
+ ifname_subchannels="${ifname_subchannels//,/|}"
+ # sanitize for use in udev label: replace non-word characters by _
+ ifname_if_label="${ifname_if//[^[:word:]]/_}"
- echo 'ACTION!="add|change", GOTO="ccw_ifname_end"'
- echo 'ATTR{type}!="1", GOTO="ccw_ifname_end"'
- echo 'SUBSYSTEM!="net", GOTO="ccw_ifname_end"'
+ echo "ACTION!=\"add|change\", GOTO=\"ccw_ifname_${ifname_if_label}_end\""
+ echo "ATTR{type}!=\"1\", GOTO=\"ccw_ifname_${ifname_if_label}_end\""
+ echo "SUBSYSTEM!=\"net\", GOTO=\"ccw_ifname_${ifname_if_label}_end\""
echo "SUBSYSTEMS==\"ccwgroup\", KERNELS==\"$ifname_subchannels\", DRIVERS==\"?*\" NAME=\"$ifname_if\""
- echo 'LABEL="ccw_ifname_end"'
+ echo "LABEL=\"ccw_ifname_${ifname_if_label}_end\""
- } > /etc/udev/rules.d/81-ccw-ifname.rules
+ } >> /etc/udev/rules.d/81-ccw-ifname.rules
fi
done
-
-znet_cio_free