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 "mount [fe80::5054:ff:fe48:ca80%eth0]:/mnt /mnt" else /etc/kdump.conf should be edited like "mount [2001:db8:0:f101::2]:/mnt /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@redhat.com --- dracut-kdump.sh | 5 +++-- dracut-module-setup.sh | 37 +++++++++++++++++++++++++++++-------- 2 files changed, 32 insertions(+), 10 deletions(-)
diff --git a/dracut-kdump.sh b/dracut-kdump.sh index cb13d92..12a1c8c 100755 --- a/dracut-kdump.sh +++ b/dracut-kdump.sh @@ -206,10 +206,11 @@ 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 '` + _host=`ip addr show dev $kdumpnic|grep 'inet'` [ $? -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..20bdb38 100755 --- a/dracut-module-setup.sh +++ b/dracut-module-setup.sh @@ -71,11 +71,22 @@ 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 [ -z "$ipv6" ] + then + if [ -n "$IPADDR" ]; then + [ -z "$NETMASK" -a -n "$PREFIX" ] && \ + NETMASK=$(ipcalc -m $IPADDR/$PREFIX | cut -d'=' -f2) + echo -n "${IPADDR}::${GATEWAY}:${NETMASK}::" + fi + else + if [ -n "$IPV6ADDR" ]; then + IPV6ADDR=${IPV6ADDR%/*} #strip the prefix + IPV6ADDR="[${IPV6ADDR}]" + IPV6_DEFAULTGW="[${IPV6_DEFAULTGW}]" + echo -n "${IPV6ADDR}::${IPV6_DEFAULTGW}:64::" + fi fi + unset ipv6 }
kdump_get_mac_addr() { @@ -227,16 +238,26 @@ 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 + + ipv6=`echo $_server | grep ":"`
- _need_dns=`echo $_server|grep "[a-zA-Z]"` - [ -n "$_need_dns" ] && _server=`getent hosts $_server|cut -d' ' -f1` + #ipv4 address or hostname + if [ -z "$ipv6" ] + 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`