On 12/05/14 at 04:24pm, Minfei Huang wrote:
diff --git a/dracut-kdump.sh b/dracut-kdump.sh
index 4fef0c5..cbfe7c6 100755
--- a/dracut-kdump.sh
+++ b/dracut-kdump.sh
@@ -131,6 +131,27 @@ get_host_ip()
return 0
}
+# kdump will change the ethernet device name in the 2nd using prefix
"kdump-",
+# the link scope of ipv6 has the format like fe80::5054:ff:fe48:ca80%eth0,
+# So we should correct the known hosts
+correct_known_hosts()
+{
+ if is_ipv6_target && is_ssh_dump_target; then
+ local _ipv6 _netdev _pre_netdev
+ local _known_hosts="/root/.ssh/known_hosts"
+ local _srcaddr=$(get_option_value ssh)
+
+ [ "x" = "x""$_srcaddr" ] && return 1
+
+ if `echo $_srcaddr | grep -q "%"`; then
+ _ipv6=`get_remote_host $_srcaddr`
+ _netdev=${_srcaddr#*-}
+ _pre_netdev=$(kdump_setup_ifname $_netdev)
+ sed -i "s#$_ipv6\%$_netdev#$_ipv6\%$_pre_netdev#" $_known_hosts
+ fi
+ fi
+}
If you like, correct_known_hosts is also a func only used for ipv6
handling. Please think about it.
+
read_kdump_conf()
{
if [ ! -f "$KDUMP_CONF" ]; then
@@ -182,6 +203,8 @@ if [ $? -ne 0 ]; then
exit 1
fi
+correct_known_hosts
+
if [ -z "$DUMP_INSTRUCTION" ]; then
add_dump_code "dump_fs $NEWROOT"
fi
diff --git a/dracut-module-setup.sh b/dracut-module-setup.sh
index f47f428..79a6c83 100755
--- a/dracut-module-setup.sh
+++ b/dracut-module-setup.sh
@@ -97,22 +97,6 @@ kdump_get_perm_addr() {
fi
}
-# Prefix kernel assigned names with "kdump-". EX: eth0 -> kdump-eth0
-# Because kernel assigned names are not persistent between 1st and 2nd
-# kernel. We could probably end up with eth0 being eth1, eth0 being
-# eth1, and naming conflict happens.
-kdump_setup_ifname() {
- local _ifname
-
- if [[ $1 =~ eth* ]]; then
- _ifname="kdump-$1"
- else
- _ifname="$1"
- fi
-
- echo "$_ifname"
-}
-
kdump_setup_bridge() {
local _netdev=$1
local _brif _dev _mac _kdumpdev
diff --git a/kdump-lib.sh b/kdump-lib.sh
index b9dec21..f24f08d 100755
--- a/kdump-lib.sh
+++ b/kdump-lib.sh
@@ -138,3 +138,53 @@ check_save_path_fs()
fi
}
+
+# Prefix kernel assigned names with "kdump-". EX: eth0 -> kdump-eth0
+# Because kernel assigned names are not persistent between 1st and 2nd
+# kernel. We could probably end up with eth0 being eth1, eth0 being
+# eth1, and naming conflict happens.
+kdump_setup_ifname() {
+ local _ifname
+
+ if [[ $1 =~ eth* ]]; then
+ _ifname="kdump-$1"
+ else
+ _ifname="$1"
+ fi
+
+ echo "$_ifname"
+}
+
+# get ip address or hostname from nfs/ssh config value
+get_remote_host()
+{
+ local _config_val=$1
+
+ # in ipv6, the _config_val format is [xxxx:xxxx::xxxx%eth0]:/mnt/nfs or
+ # username at xxxx:xxxx::xxxx%eth0. what we need is just xxxx:xxxx::xxxx
+ _config_val=${_config_val#*@}
+ _config_val=${_config_val%:/*}
+ _config_val=${_config_val#[}
+ _config_val=${_config_val%]}
+ _config_val=${_config_val%\%*}
+ echo $_config_val
+}
+
+# check the remote server ip address tpye
+is_ipv6_target()
+{
+ local _server _server_tmp
+
+ if is_ssh_dump_target; then
+ _server=`get_option_value ssh`
+ elif is_nfs_dump_target; then
+ _server=`get_option_value nfs`
+ fi
+
+ [ -z "$_server" ] && return 1
+ _server=`get_remote_host $_server`
+ _server_tmp=$_server
+ _server=`getent ahosts $_server | head -n 1 | cut -d' ' -f1`
+ _server=${_server:-$_server_tmp}
+ echo $_server | grep -q ":"
+}
--
1.8.3.1
_______________________________________________
kexec mailing list
kexec(a)lists.fedoraproject.org
https://lists.fedoraproject.org/mailman/listinfo/kexec