Iterate /sys/bus/ccwgroup/devices to tell if we should set up rd.znet
This patch fixes bz1941106 and bz1941905 which passed empty rd.znet to the
kernel command line in the following cases,
- The IBM (Z15) KVM guest uses virtio for all devices including network
device, so there is no znet device for IBM KVM guest. So we can't
assume a s390x machine always has a znet device.
- When a bridged network is used, kexec-tools tries to obtain the znet
configuration from the ifcfg script of the bridged network rather than
from the ifcfg script of znet device.
We can iterate /sys/bus/ccwgroup/devices to tell if there if there is
a znet network device. By getting an ifname from znet, we can also avoid
mistaking the slave netdev as a znet network device in a bridged network
or bonded network.
Note: This patch also assumes there is only one znet device as commit
7148c0a30d
("add s390x netdev setup")
which greatly simplifies the code. According to IBM [1], there could be
more than znet devices for a z/VM system and a z/VM system may have a
non-znet network device like ConnectX. Since kdump_setup_znet was
introduced in 2012 and so far there is no known customer complaint that
invalidates this assumption I think it's safe to assume an IBM z/VM
system only has one znet device. Besides, there is no z/VM system found
on beaker to test the alternative scenarios.
[1] https://bugzilla.redhat.com/show_bug.cgi?id=1941905#c13
Signed-off-by: Coiby Xu <coxu@redhat.com>
Acked-by: Kairui Song <kasong@redhat.com>
This commit is contained in:
parent
41980f30d9
commit
7d47251568
@ -460,6 +460,34 @@ kdump_setup_vlan() {
|
|||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# find online znet device
|
||||||
|
# return ifname (_netdev)
|
||||||
|
# code reaped from the list_configured function of
|
||||||
|
# https://github.com/hreinecke/s390-tools/blob/master/zconf/znetconf
|
||||||
|
find_online_znet_device() {
|
||||||
|
local CCWGROUPBUS_DEVICEDIR="/sys/bus/ccwgroup/devices"
|
||||||
|
local NETWORK_DEVICES d ifname ONLINE
|
||||||
|
NETWORK_DEVICES=$(find $CCWGROUPBUS_DEVICEDIR -type l)
|
||||||
|
for d in $NETWORK_DEVICES
|
||||||
|
do
|
||||||
|
read ONLINE < $d/online
|
||||||
|
if [ $ONLINE -ne 1 ]; then
|
||||||
|
continue
|
||||||
|
fi
|
||||||
|
# determine interface name, if there (only for qeth and if
|
||||||
|
# device is online)
|
||||||
|
if [ -f $d/if_name ]
|
||||||
|
then
|
||||||
|
read ifname < $d/if_name
|
||||||
|
elif [ -d $d/net ]
|
||||||
|
then
|
||||||
|
ifname=$(ls $d/net/)
|
||||||
|
fi
|
||||||
|
[ -n "$ifname" ] && break
|
||||||
|
done
|
||||||
|
echo -n "$ifname"
|
||||||
|
}
|
||||||
|
|
||||||
# setup s390 znet cmdline
|
# setup s390 znet cmdline
|
||||||
# $1: netdev (ifname)
|
# $1: netdev (ifname)
|
||||||
# $2: nmcli connection show output
|
# $2: nmcli connection show output
|
||||||
@ -526,6 +554,7 @@ kdump_get_remote_ip()
|
|||||||
kdump_install_net() {
|
kdump_install_net() {
|
||||||
local _destaddr _srcaddr _route _netdev _nm_show_cmd kdumpnic
|
local _destaddr _srcaddr _route _netdev _nm_show_cmd kdumpnic
|
||||||
local _static _proto _ip_conf _ip_opts _ifname_opts
|
local _static _proto _ip_conf _ip_opts _ifname_opts
|
||||||
|
local _znet_netdev _nm_show_cmd_znet
|
||||||
|
|
||||||
_destaddr=$(kdump_get_remote_ip $1)
|
_destaddr=$(kdump_get_remote_ip $1)
|
||||||
_route=$(kdump_get_ip_route $_destaddr)
|
_route=$(kdump_get_ip_route $_destaddr)
|
||||||
@ -535,8 +564,10 @@ kdump_install_net() {
|
|||||||
_netmac=$(kdump_get_mac_addr $_netdev)
|
_netmac=$(kdump_get_mac_addr $_netdev)
|
||||||
kdumpnic=$(kdump_setup_ifname $_netdev)
|
kdumpnic=$(kdump_setup_ifname $_netdev)
|
||||||
|
|
||||||
if [ "$(uname -m)" = "s390x" ]; then
|
_znet_netdev=$(find_online_znet_device)
|
||||||
$(kdump_setup_znet "$_netdev" "$_nm_show_cmd")
|
if [[ -n "$_znet_netdev" ]]; then
|
||||||
|
_nm_show_cmd_znet=$(get_nmcli_connection_show_cmd_by_ifname "$_znet_netdev")
|
||||||
|
$(kdump_setup_znet "$_znet_netdev" "$_nm_show_cmd_znet")
|
||||||
if [[ $? != 0 ]]; then
|
if [[ $? != 0 ]]; then
|
||||||
derror "Failed to set up znet"
|
derror "Failed to set up znet"
|
||||||
exit 1
|
exit 1
|
||||||
|
Loading…
Reference in New Issue
Block a user