This patch setup kdump network by directly copying NM connection profile(s)
for different network setup including bond, bridge, vlan, and team. For
vlan network, rename phydev to parent_netif to improve code readability.
Signed-off-by: Coiby Xu <coxu(a)redhat.com>
---
dracut-module-setup.sh | 90 ++++++++++--------------------------------
1 file changed, 20 insertions(+), 70 deletions(-)
diff --git a/dracut-module-setup.sh b/dracut-module-setup.sh
index d5e71c3..3e2eb9f 100755
--- a/dracut-module-setup.sh
+++ b/dracut-module-setup.sh
@@ -419,102 +419,55 @@ kdump_copy_nmconnection_file() {
kdump_setup_bridge() {
local _netdev=$1
- local _brif _dev _mac _kdumpdev
+ local _dev
for _dev in "/sys/class/net/$_netdev/brif/"*; do
[[ -e $_dev ]] || continue
_dev=${_dev##*/}
- _kdumpdev=$_dev
if kdump_is_bond "$_dev"; then
- (kdump_setup_bond "$_dev"
"$(get_nmcli_connection_apath_by_ifname "$_dev")") || exit 1
+ (kdump_setup_bond "$_dev") || exit 1
elif kdump_is_team "$_dev"; then
kdump_setup_team "$_dev"
elif kdump_is_vlan "$_dev"; then
kdump_setup_vlan "$_dev"
- else
- _mac=$(kdump_get_mac_addr "$_dev")
- _kdumpdev=$(kdump_setup_ifname "$_dev")
- echo -n " ifname=$_kdumpdev:$_mac" >>
"${initdir}/etc/cmdline.d/41bridge.conf"
fi
- _brif+="$_kdumpdev,"
+ kdump_copy_nmconnection_file "$_dev"
done
- echo " bridge=$_netdev:${_brif%,}" >>
"${initdir}/etc/cmdline.d/41bridge.conf"
}
-# drauct takes bond=<bondname>[:<bondslaves>:[:<options>]] syntax to
parse
-# bond. For example:
-# bond=bond0:eth0,eth1:mode=balance-rr
kdump_setup_bond() {
local _netdev="$1"
- local _conpath="$2"
- local _dev _mac _slaves _kdumpdev _bondoptions
+ local _dev
+
for _dev in $(< "/sys/class/net/$_netdev/bonding/slaves"); do
- _mac=$(kdump_get_perm_addr "$_dev")
- _kdumpdev=$(kdump_setup_ifname "$_dev")
- echo -n " ifname=$_kdumpdev:$_mac" >>
"${initdir}/etc/cmdline.d/42bond.conf"
- _slaves+="$_kdumpdev,"
+ kdump_copy_nmconnection_file "$_dev"
done
- echo -n " bond=$_netdev:${_slaves%,}" >>
"${initdir}/etc/cmdline.d/42bond.conf"
-
- _bondoptions=$(get_nmcli_field_by_conpath "bond.options"
"$_conpath")
-
- if [[ -z $_bondoptions ]]; then
- dwarning "Failed to get bond configuration via nmlci output. Now try
sourcing ifcfg script."
- source_ifcfg_file "$_netdev"
- _bondoptions="$(echo "$BONDING_OPTS" | xargs echo | tr "
" ",")"
- fi
-
- if [[ -z $_bondoptions ]]; then
- derror "Get empty bond options"
- exit 1
- fi
-
- echo ":$_bondoptions" >>
"${initdir}/etc/cmdline.d/42bond.conf"
}
kdump_setup_team() {
local _netdev=$1
- local _dev _mac _slaves _kdumpdev
+ local _dev
for _dev in $(teamnl "$_netdev" ports | awk -F':' '{print
$2}'); do
- _mac=$(kdump_get_perm_addr "$_dev")
- _kdumpdev=$(kdump_setup_ifname "$_dev")
- echo -n " ifname=$_kdumpdev:$_mac" >>
"${initdir}/etc/cmdline.d/44team.conf"
- _slaves+="$_kdumpdev,"
+ kdump_copy_nmconnection_file "$_dev"
done
- echo " team=$_netdev:${_slaves%,}" >>
"${initdir}/etc/cmdline.d/44team.conf"
- #Buggy version teamdctl outputs to stderr!
- #Try to use the latest version of teamd.
- if ! teamdctl "$_netdev" config dump >
"${initdir}/tmp/$$-$_netdev.conf"; then
- derror "teamdctl failed."
- exit 1
- fi
- inst_dir /etc/teamd
- inst_simple "${initdir}/tmp/$$-$_netdev.conf"
"/etc/teamd/$_netdev.conf"
- rm -f "${initdir}/tmp/$$-$_netdev.conf"
}
kdump_setup_vlan() {
local _netdev=$1
- local _phydev
- local _netmac
- local _kdumpdev
+ local _parent_netif
- _phydev="$(awk '/^Device:/{print $2}'
/proc/net/vlan/"$_netdev")"
- _netmac="$(kdump_get_mac_addr "$_phydev")"
+ _parent_netif="$(awk '/^Device:/{print $2}'
/proc/net/vlan/"$_netdev")"
#Just support vlan over bond and team
- if kdump_is_bridge "$_phydev"; then
+ if kdump_is_bridge "$_parent_netif"; then
derror "Vlan over bridge is not supported!"
exit 1
- elif kdump_is_bond "$_phydev"; then
- (kdump_setup_bond "$_phydev"
"$(get_nmcli_connection_apath_by_ifname "$_phydev")") || exit 1
- echo " vlan=$(kdump_setup_ifname "$_netdev"):$_phydev" >
"${initdir}/etc/cmdline.d/43vlan.conf"
- elif kdump_is_team "$_phydev"; then
- (kdump_setup_team "$_phydev") || exit 1
- echo " vlan=$(kdump_setup_ifname "$_netdev"):$_phydev" >
"${initdir}/etc/cmdline.d/43vlan.conf"
- else
- _kdumpdev="$(kdump_setup_ifname "$_phydev")"
- echo " vlan=$(kdump_setup_ifname "$_netdev"):$_kdumpdev
ifname=$_kdumpdev:$_netmac" > "${initdir}/etc/cmdline.d/43vlan.conf"
+ elif kdump_is_bond "$_parent_netif"; then
+ (kdump_setup_bond "$_parent_netif") || exit 1
+ elif kdump_is_team "$_parent_netif"; then
+ (kdump_setup_team "$_parent_netif") || exit 1
fi
+
+ kdump_copy_nmconnection_file "$_parent_netif"
}
# find online znet device
@@ -606,7 +559,7 @@ kdump_get_remote_ip() {
# $1: destination host
kdump_install_net() {
local _destaddr _srcaddr _route _netdev _conpath kdumpnic
- local _static _proto _ip_conf _ip_opts _ifname_opts
+ local _static _proto _ip_conf _ip_opts
local _znet_netdev _znet_conpath
# each netowrk interface is managed by a NM connection profile
declare -A nmconnection_map
@@ -621,7 +574,6 @@ kdump_install_net() {
_srcaddr=$(kdump_get_ip_route_field "$_route" "src")
_netdev=$(kdump_get_ip_route_field "$_route" "dev")
_conpath=$(get_nmcli_connection_apath_by_ifname "$_netdev")
- _netmac=$(kdump_get_mac_addr "$_netdev")
kdumpnic=$(kdump_setup_ifname "$_netdev")
_znet_netdev=$(find_online_znet_device)
@@ -657,15 +609,13 @@ kdump_install_net() {
if kdump_is_bridge "$_netdev"; then
kdump_setup_bridge "$_netdev"
elif kdump_is_bond "$_netdev"; then
- (kdump_setup_bond "$_netdev" "$_conpath") || exit 1
+ (kdump_setup_bond "$_netdev") || exit 1
elif kdump_is_team "$_netdev"; then
kdump_setup_team "$_netdev"
elif kdump_is_vlan "$_netdev"; then
kdump_setup_vlan "$_netdev"
- else
- _ifname_opts=" ifname=$kdumpnic:$_netmac"
- echo "$_ifname_opts" >> "$_ip_conf"
fi
+ kdump_copy_nmconnection_file "$_netdev"
kdump_setup_dns "$_netdev" "$_conpath"
--
2.37.1