Resolves: bz821620
Currently dracut has supported for ipv6, and it is a significant feture for
kdump to enhance to support ipv6.
For ipv6 nfs dump:
if ipv6 address type is link scope, /etc/kdump.conf should be edited like
"nfs [fe80::5054:ff:fe48:ca80%eth0]:/mnt"
else /etc/kdump.conf should be edited like "nfs [2001:db8:0:f101::2]:/mnt"
For ipv6 ssh dump
if ipv6 address type is link scope, /etc/kdump.conf should be edited like
"ssh root@fe80::5054:ff:fe48:ca80%eth0"
else /etc/kdump.conf should be edited like "ssh root@2001:db8:0:f101::2"
Signed-off-by: Arthur Zou <zzou(a)redhat.com>
---
dracut-kdump.sh | 10 ++++++++--
dracut-module-setup.sh | 34 ++++++++++++++++++++++++++--------
kdump-lib.sh | 17 +++++++++++++++++
3 files changed, 51 insertions(+), 10 deletions(-)
diff --git a/dracut-kdump.sh b/dracut-kdump.sh
index cb13d92..c215bee 100755
--- a/dracut-kdump.sh
+++ b/dracut-kdump.sh
@@ -206,10 +206,16 @@ get_host_ip()
then
kdumpnic=$(getarg kdumpnic=)
[ -z "$kdumpnic" ] && echo "kdump: failed to get
kdumpnic!" && return 1
- _host=`ip addr show dev $kdumpnic|grep 'inet '`
+ if is_ipv6_target
+ then
+ _host=`ip addr show dev $kdumpnic|grep 'inet6'`
+ else
+ _host=`ip addr show dev $kdumpnic|grep 'inet '`
+ fi
[ $? -ne 0 ] && echo "kdump: wrong kdumpnic: $kdumpnic"
&& return 1
- _host="${_host##*inet }"
+ _host="${_host#*inet}"
_host="${_host%%/*}"
+ _host=`echo $_host | cut -d' ' -f2`
[ -z "$_host" ] && echo "kdump: wrong kdumpnic:
$kdumpnic" && return 1
HOST_IP=$_host
fi
diff --git a/dracut-module-setup.sh b/dracut-module-setup.sh
index 2a16900..c305d8e 100755
--- a/dracut-module-setup.sh
+++ b/dracut-module-setup.sh
@@ -71,10 +71,20 @@ kdump_setup_dns() {
#if it use static ip echo it, or echo null
kdump_static_ip() {
. /etc/sysconfig/network-scripts/ifcfg-$1
- if [ -n "$IPADDR" ]; then
- [ -z "$NETMASK" -a -n "$PREFIX" ] && \
- NETMASK=$(ipcalc -m $IPADDR/$PREFIX | cut -d'=' -f2)
- echo -n "${IPADDR}::${GATEWAY}:${NETMASK}::"
+ if is_ipv6_target
+ then
+ if [ -n "$IPV6ADDR" ]; then
+ IPV6ADDR=${IPV6ADDR%/*} #strip the prefix
+ IPV6ADDR="[${IPV6ADDR}]"
+ IPV6_DEFAULTGW="[${IPV6_DEFAULTGW}]"
+ echo -n "${IPV6ADDR}::${IPV6_DEFAULTGW}:64::"
+ fi
+ else
+ if [ -n "$IPADDR" ]; then
+ [ -z "$NETMASK" -a -n "$PREFIX" ] && \
+ NETMASK=$(ipcalc -m $IPADDR/$PREFIX | cut -d'=' -f2)
+ echo -n "${IPADDR}::${GATEWAY}:${NETMASK}::"
+ fi
fi
}
@@ -227,16 +237,24 @@ kdump_install_net() {
local _server _netdev
local config_val="$1"
- _server=`echo $config_val | sed 's/.*@//' | cut -d':' -f1`
+ _server=`echo $config_val | sed 's/.*@//'`
+ _server=${_server%:/*}
+ _server=${_server#[}
+ _server=${_server%]}
+ _server=${_server%\%*} #strip the zone_ID if exist
- _need_dns=`echo $_server|grep "[a-zA-Z]"`
- [ -n "$_need_dns" ] && _server=`getent hosts $_server|cut -d'
' -f1`
+ #ipv4 address or hostname
+ if ! is_ipv6_target
+ then
+ _need_dns=`echo $_server|grep "[a-zA-Z]"`
+ [ -n "$_need_dns" ] && _server=`getent hosts $_server|cut
-d' ' -f1`
+ fi
_netdev=`/sbin/ip route get to $_server 2>&1`
[ $? != 0 ] && echo "Bad kdump location: $config_val" &&
exit 1
#the field in the ip output changes if we go to another subnet
- if [ -n "`echo $_netdev | grep via`" ]
+ if [ -n "`echo $_netdev | grep -E 'via|from'`" ]
then
# we are going to a different subnet
_netdev=`echo $_netdev|awk '{print $5;}'|head -n 1`
diff --git a/kdump-lib.sh b/kdump-lib.sh
index a20c6e8..332328f 100755
--- a/kdump-lib.sh
+++ b/kdump-lib.sh
@@ -44,6 +44,23 @@ strip_comments()
echo $@ | sed -e 's/\(.*\)#.*/\1/'
}
+# check the remote server ip address tpye
+is_ipv6_target()
+{
+ local _server
+ if is_ssh_dump_target; then
+ _server=`grep "^ssh" /etc/kdump.conf`
+ elif is_nfs_dump_target; then
+ _server=`grep "^nfs" /etc/kdump.conf`
+ fi
+
+ [ -z "$_server" ] && return 1
+ _server=`strip_comment $_server`
+ _server=${_server#*@}
+ _server=${_server%:/*}
+ echo $_server | grep -q ":"
+}
+
# Check if fence kdump is configured in Pacemaker cluster
is_pcs_fence_kdump()
{
--
1.8.4.2
Show replies by date