dracut-module-setup.sh: pass correct ip= param for ipv6

Kdump always use _proto=dhcp for both ipv4 and ipv6.  But for ipv6
the dhcp address assignment is not like ipv4, there are different ways
for it, stateless and stateful, see below document:
https://fedoraproject.org/wiki/IPv6Guide

In case stateless, kernel can do the address assignment, dracut use
_proto=auto6;  for stateful case, dracut use _proto=dhcp6.

We do not see bug reports before because for the most auto6 cases
kernel assign ip address before dhclient, kdump just happened to work.

Here we use auto6 if possible first. And we take the assumption that
host use auto6 if /proc/sys/net/ipv6/conf/$netdev/autoconf is enabled

Signed-off-by: Pingfan Liu <piliu@redhat.com>
This commit is contained in:
Pingfan Liu 2018-03-05 15:09:09 +08:00 committed by Dave Young
parent 4d1e8aadc8
commit 2f4149f276
2 changed files with 18 additions and 0 deletions

View File

@ -293,6 +293,12 @@ kdump_setup_netdev() {
_static=$(kdump_static_ip $_netdev $_srcaddr)
if [ -n "$_static" ]; then
_proto=none
elif is_ipv6_address $_srcaddr; then
if is_ipv6_auto $_netdev; then
_proto=auto6
else
_proto=dhcp6
fi
else
_proto=dhcp
fi

View File

@ -310,6 +310,18 @@ is_atomic()
grep -q "ostree" /proc/cmdline
}
# fixme, try the best to decide whether the ipv6 addr is allocated by slaac or dhcp6
is_ipv6_auto()
{
local _netdev=$1
local _auto=$(cat /proc/sys/net/ipv6/conf/$_netdev/autoconf)
if [ $_auto -eq 1 ]; then
return 0
else
return 1
fi
}
is_ipv6_address()
{
echo $1 | grep -q ":"