ae5557c4aa
Initialise IPv6 addresses in initrd. OBS-URL: https://build.opensuse.org/request/show/251691 OBS-URL: https://build.opensuse.org/package/show/Kernel:kdump/kdump?expand=0&rev=110
179 lines
5.1 KiB
Diff
179 lines
5.1 KiB
Diff
From: Petr Tesarik <ptesarik@suse.cz>
|
|
Date: Tue Sep 23 07:09:44 2014 +0200
|
|
Subject: Split kdump_default_netdev()
|
|
References: bnc#885897
|
|
Patch-mainline: v0.8.16
|
|
Git-commit: 4da0601f2edcef642da502db6f4299204365c631
|
|
|
|
This function did too many things, which are now split thus:
|
|
|
|
1. determine the default network interface
|
|
-> kept in kdump_default_netdev
|
|
|
|
2. get the underlying physical devices of a bridge
|
|
-> kdump_bridge_phys_dev
|
|
|
|
3. determine network interface operating mode
|
|
-> kdump_netdev_mode
|
|
|
|
Signed-off-by: Petr Tesarik <ptesarik@suse.cz>
|
|
|
|
---
|
|
init/mkdumprd | 1
|
|
init/setup-kdump.functions | 94 +++++++++++++++++++++++++--------------------
|
|
2 files changed, 54 insertions(+), 41 deletions(-)
|
|
|
|
--- a/init/mkdumprd
|
|
+++ b/init/mkdumprd
|
|
@@ -168,7 +168,6 @@ function run_dracut()
|
|
|
|
if [ "$interface" = "default" ] ; then
|
|
interface=$( kdump_default_netdev )
|
|
- interface="${interface% *}"
|
|
status_message "Network interface: $interface (default)"
|
|
else
|
|
status_message "Network interface: $interface"
|
|
--- a/init/setup-kdump.functions
|
|
+++ b/init/setup-kdump.functions
|
|
@@ -77,12 +77,10 @@ function kdump_wicked_conf() # {
|
|
# Determine the default network device.
|
|
#
|
|
# Output:
|
|
-# "$ifname $mode"
|
|
-# ifname default network interface name (or empty if none)
|
|
-# mode initialization mode ("static" or "dhcp")
|
|
+# ifname default network interface name (or empty if none)
|
|
function kdump_default_netdev() # {{{
|
|
{
|
|
- local ifname BOOTPROTO
|
|
+ local ifname
|
|
local inffile="/etc/install.inf"
|
|
|
|
# check current default routes
|
|
@@ -95,7 +93,6 @@ function kdump_default_netdev()
|
|
if [ -z "$ifname" -a -f "$inffile" ] ; then
|
|
local dev hwaddr hwaddr2
|
|
eval $( sed -ne '
|
|
- s/^NetConfig: \(.*\)/BOOTPROTO=\1/p;
|
|
s/^Netdevice: \(.*\)/ifname=\1/p;
|
|
s/HWAddr: \(.*\)/hwaddr=\1/p' \
|
|
"$inffile" )
|
|
@@ -108,12 +105,53 @@ function kdump_default_netdev()
|
|
done
|
|
fi
|
|
fi
|
|
+ echo "$ifname"
|
|
+} # }}}
|
|
|
|
- # if still not found, there is no network
|
|
- if [ -z "$ifname" ] ; then
|
|
- return 0
|
|
+# Get the underlying physical devices of a bridge.
|
|
+#
|
|
+# Virtual devices (tap or vif) are ignored.
|
|
+#
|
|
+# Parameters:
|
|
+# 1) ifname bridge interface name
|
|
+# Output:
|
|
+# ifnames list of underlying physical interfaces;
|
|
+function kdump_bridge_phys_dev() # {{{
|
|
+{
|
|
+ local ifname="$1"
|
|
+
|
|
+ if [ -d "/sys/class/net/$ifname/bridge" -a \
|
|
+ -d "/sys/class/net/$ifname/brif" ] ; then
|
|
+
|
|
+ local ifname2 count=0
|
|
+ local -a res
|
|
+ for ifname2 in "/sys/class/net/$ifname/brif"/*; do
|
|
+ case "$(readlink -f "$ifname2")" in
|
|
+ /sys/devices/virtual/*)
|
|
+ continue
|
|
+ esac
|
|
+ res[count]="${ifname2##*/}"
|
|
+ count=$(( count+1 ))
|
|
+ done
|
|
+ ifname=${res[@]}
|
|
fi
|
|
|
|
+ echo "$ifname"
|
|
+} # }}}
|
|
+
|
|
+#
|
|
+# Determine the default network mode of a given device.
|
|
+#
|
|
+# Parameters:
|
|
+# 1) ifname network interface name
|
|
+# Output:
|
|
+# mode initialization mode ("static" or "dhcp")
|
|
+function kdump_netdev_mode() # {{{
|
|
+{
|
|
+ local ifname="$1"
|
|
+ local inffile="/etc/install.inf"
|
|
+ local BOOTPROTO
|
|
+
|
|
# get mode using wicked if possible
|
|
if [ -n "$(type -P wicked)" -a \
|
|
"$(kdump_wicked_conf "$ifname" name)" = "$ifname" ]
|
|
@@ -135,6 +173,12 @@ function kdump_default_netdev()
|
|
fi
|
|
fi
|
|
|
|
+ # try install.conf
|
|
+ if [ -z "$BOOTPROTO" ] ; then
|
|
+ eval $( sed -ne 's/^NetConfig: \(.*\)/BOOTPROTO=\1/p;' \
|
|
+ "$inffile" )
|
|
+ fi
|
|
+
|
|
# if not found, look if there is a dhcp daemon for the interface
|
|
if [ -z "$BOOTPROTO" ] ; then
|
|
if [ -n "$(ps -C dhclient,dhclient6,dhcpcd -o cmd= |
|
|
@@ -145,31 +189,7 @@ function kdump_default_netdev()
|
|
fi
|
|
fi
|
|
|
|
- # if the interface is a bridge, then try to use the underlying interface
|
|
- # if it is the only non-virtual interface (not tap or vif)
|
|
- if [ -d "/sys/class/net/$ifname/bridge" -a \
|
|
- -d "/sys/class/net/$ifname/brif" ] ; then
|
|
-
|
|
- local ifname2 res count=0
|
|
- for ifname2 in "/sys/class/net/$ifname/brif"/*; do
|
|
- case "$(readlink -f "$ifname2")" in
|
|
- /sys/devices/virtual/*)
|
|
- continue
|
|
- esac
|
|
- res="${ifname2##*/}"
|
|
- count=$(( count+1 ))
|
|
- done
|
|
-
|
|
- if [ "$count" -ne 1 ] ; then
|
|
- echo >&2 ">>> WARNING: $ifname is a bridge with more than one"
|
|
- echo >&2 ">>> underlying interface. Please specify the device"
|
|
- echo >&2 ">>> in KDUMP_NETCONFIG manually."
|
|
- else
|
|
- ifname="$res"
|
|
- fi
|
|
- fi
|
|
-
|
|
- echo "$ifname $BOOTPROTO"
|
|
+ echo "$BOOTPROTO"
|
|
} # }}}
|
|
|
|
#
|
|
@@ -205,13 +225,7 @@ kdump_prefix2netmask() { # {{{
|
|
function kdump_ip_config() # {{{
|
|
{
|
|
local iface="$1"
|
|
- if [ -z "$iface" ] ; then
|
|
- iface=$( kdump_default_netdev )
|
|
- iface="${iface% *}"
|
|
- fi
|
|
- [ -z "$iface" ] && return 1
|
|
-
|
|
- local ipaddr peeraddr gwaddr netmask hostname iface
|
|
+ local ipaddr peeraddr gwaddr netmask hostname
|
|
local family cidr rest
|
|
local prefix
|
|
while read family cidr rest
|