When using ipv6, a kthread will wait for router advertisements and calc the ip addr. If ssh-dump with ipv6-target-addr, there is a race between the kthread and kdump dumping process. kdump should wait until the ipv6 addr is ready. Since dracut has implemented this function, we can pass dhcp6 or auto6 in cmdline to activate it. But in 1st kernel, we can not know whether the ipv6 addr is got by dhcp6 or by auto6 without causing side-effect (dhclient -6 will realloc addr). To address it, we take the assumption that if /proc/sys/net/ipv6/conf/$netdev/autoconf is enabled, then the host uses auto6.
Signed-off-by: Pingfan Liu piliu@redhat.com --- v1->v2: commit log improvement
dracut-module-setup.sh | 6 ++++++ kdump-lib.sh | 12 ++++++++++++ 2 files changed, 18 insertions(+)
diff --git a/dracut-module-setup.sh b/dracut-module-setup.sh index c0f1a88..d1dd673 100755 --- a/dracut-module-setup.sh +++ b/dracut-module-setup.sh @@ -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 diff --git a/kdump-lib.sh b/kdump-lib.sh index d981c4f..ac4dc67 100755 --- a/kdump-lib.sh +++ b/kdump-lib.sh @@ -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 ":"
On 03/05/18 at 03:09pm, Pingfan Liu wrote:
When using ipv6, a kthread will wait for router advertisements and calc the ip addr. If ssh-dump with ipv6-target-addr, there is a race between the kthread and kdump dumping process. kdump should wait until the ipv6 addr is ready. Since dracut has implemented this function, we can pass dhcp6 or auto6 in cmdline to activate it. But in 1st kernel, we can not know whether the ipv6 addr is got by dhcp6 or by auto6 without causing side-effect (dhclient -6 will realloc addr). To address it, we take the assumption that if /proc/sys/net/ipv6/conf/$netdev/autoconf is enabled, then the host uses auto6.
Pingfan, I missed the new post, the patchlog is still not very clear. I plan to fix it and apply it like below, if anything is not correct please let me know.
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
v1->v2: commit log improvement
dracut-module-setup.sh | 6 ++++++ kdump-lib.sh | 12 ++++++++++++ 2 files changed, 18 insertions(+)
diff --git a/dracut-module-setup.sh b/dracut-module-setup.sh index c0f1a88..d1dd673 100755 --- a/dracut-module-setup.sh +++ b/dracut-module-setup.sh @@ -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
else _proto=dhcp fifi
diff --git a/kdump-lib.sh b/kdump-lib.sh index d981c4f..ac4dc67 100755 --- a/kdump-lib.sh +++ b/kdump-lib.sh @@ -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 ":" -- 2.7.4
Thanks Dave
On 03/15/2018 10:28 AM, Dave Young wrote:
On 03/05/18 at 03:09pm, Pingfan Liu wrote:
When using ipv6, a kthread will wait for router advertisements and calc the ip addr. If ssh-dump with ipv6-target-addr, there is a race between the kthread and kdump dumping process. kdump should wait until the ipv6 addr is ready. Since dracut has implemented this function, we can pass dhcp6 or auto6 in cmdline to activate it. But in 1st kernel, we can not know whether the ipv6 addr is got by dhcp6 or by auto6 without causing side-effect (dhclient -6 will realloc addr). To address it, we take the assumption that if /proc/sys/net/ipv6/conf/$netdev/autoconf is enabled, then the host uses auto6.
Pingfan, I missed the new post, the patchlog is still not very clear. I plan to fix it and apply it like below, if anything is not correct please let me know.
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
It seems clear, thanks.
Regards, Pingfan
Signed-off-by: Pingfan Liu piliu@redhat.com
v1->v2: commit log improvement
dracut-module-setup.sh | 6 ++++++ kdump-lib.sh | 12 ++++++++++++ 2 files changed, 18 insertions(+)
diff --git a/dracut-module-setup.sh b/dracut-module-setup.sh index c0f1a88..d1dd673 100755 --- a/dracut-module-setup.sh +++ b/dracut-module-setup.sh @@ -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
else _proto=dhcp fifi
diff --git a/kdump-lib.sh b/kdump-lib.sh index d981c4f..ac4dc67 100755 --- a/kdump-lib.sh +++ b/kdump-lib.sh @@ -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 ":" -- 2.7.4
Thanks Dave
Hi Pingfan
On 03/15/18 at 10:28am, Dave Young wrote:
On 03/05/18 at 03:09pm, Pingfan Liu wrote:
When using ipv6, a kthread will wait for router advertisements and calc the ip addr. If ssh-dump with ipv6-target-addr, there is a race between the kthread and kdump dumping process. kdump should wait until the ipv6 addr is ready. Since dracut has implemented this function, we can pass dhcp6 or auto6 in cmdline to activate it. But in 1st kernel, we can not know whether the ipv6 addr is got by dhcp6 or by auto6 without causing side-effect (dhclient -6 will realloc addr). To address it, we take the assumption that if /proc/sys/net/ipv6/conf/$netdev/autoconf is enabled, then the host uses auto6.
Pingfan, I missed the new post, the patchlog is still not very clear. I plan to fix it and apply it like below, if anything is not correct please let me know.
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
As we talked in irc about the autoconf usage, it seems not clear if this can be used reliably. You mentioned in case autoconf configured nic it is set to true, but it does not means when it is true the nic is configured as autoconf. Can you double check this so that we can merge this patch ASAP? If we defer it then it needs a revisit in the future about all the details again.
Signed-off-by: Pingfan Liu piliu@redhat.com
v1->v2: commit log improvement
dracut-module-setup.sh | 6 ++++++ kdump-lib.sh | 12 ++++++++++++ 2 files changed, 18 insertions(+)
diff --git a/dracut-module-setup.sh b/dracut-module-setup.sh index c0f1a88..d1dd673 100755 --- a/dracut-module-setup.sh +++ b/dracut-module-setup.sh @@ -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
else _proto=dhcp fifi
diff --git a/kdump-lib.sh b/kdump-lib.sh index d981c4f..ac4dc67 100755 --- a/kdump-lib.sh +++ b/kdump-lib.sh @@ -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 ":" -- 2.7.4
Thanks Dave _______________________________________________ kexec mailing list -- kexec@lists.fedoraproject.org To unsubscribe send an email to kexec-leave@lists.fedoraproject.org
Thanks Dave