Enhance kdump to support ipv6 protocal.
v9: - re-construct the patchset to make it more clear. - modify some function name v8: - re-construct the patchset to make it more clear. v7: - use interface function is_ipv6_address to check whether is ipv6 or not - fix some bugs v6: - construct the patches, split more small patches - wrap the similar functional code to make it more clearly v5: - modify the get_route function v4: - consistent the netdevice name to add the prefix "kdump-" before the ethX v3: - Support the static route v2: - Fix some bugs
Minfei Huang (8): kdump-lib: Quote the parameter to correct it if contains the blank mkdumprd: Add proper prefix "kdump-" before ethX in 2nd kernel kdump-lib: Add functions to enhance ipv6 judgement dracut-kdump: Use the first filtered ip address as the dumping directory dracut-module-setup: Support the static route with ipv6 mode dracut-module-setup: Support the static ip with ipv6 mode dracut-module-setup: Enhance kdump to support ipv6 dracut-module-setup: Enhance iscsi to support ipv6
dracut-kdump.sh | 4 +- dracut-module-setup.sh | 162 ++++++++++++++++++++++++++++++++++++------------- kdump-lib.sh | 64 +++++++++++++++---- mkdumprd | 16 ++++- 4 files changed, 189 insertions(+), 57 deletions(-)
If the $1 parameter contains the blank, it may break the condition that whether the $1 parameter contains the "eth".
Quote the $1 to integrate it as one parameter.
Signed-off-by: Minfei Huang mhuang@redhat.com Acked-by: Baoquan He bhe@redhat.com --- kdump-lib.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/kdump-lib.sh b/kdump-lib.sh index f24f08d..b886c5d 100755 --- a/kdump-lib.sh +++ b/kdump-lib.sh @@ -146,7 +146,7 @@ check_save_path_fs() kdump_setup_ifname() { local _ifname
- if [[ $1 =~ eth* ]]; then + if [[ "$1" =~ eth* ]]; then _ifname="kdump-$1" else _ifname="$1"
On 03/10/15 at 06:48pm, Minfei Huang wrote:
If the $1 parameter contains the blank, it may break the condition that whether the $1 parameter contains the "eth".
Quote the $1 to integrate it as one parameter.
Signed-off-by: Minfei Huang mhuang@redhat.com Acked-by: Baoquan He bhe@redhat.com
kdump-lib.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/kdump-lib.sh b/kdump-lib.sh index f24f08d..b886c5d 100755 --- a/kdump-lib.sh +++ b/kdump-lib.sh @@ -146,7 +146,7 @@ check_save_path_fs() kdump_setup_ifname() { local _ifname
- if [[ $1 =~ eth* ]]; then
- if [[ "$1" =~ eth* ]]; then _ifname="kdump-$1" else _ifname="$1"
-- 1.9.3
kexec mailing list kexec@lists.fedoraproject.org https://lists.fedoraproject.org/mailman/listinfo/kexec
ACK
The ipv6 link scope (like: fe80::fab1:56ff:feb6:56d5%eth1) needs to append the netdevice to identify the ipv6 address.
Due to add prefix "kdump-" before ethX(commit: ba7660f) in the 2nd kernel, we should correct the mount parameter and /etc/kdump.conf to add the prefix "kdump-" before ethX, if use the ipv6 link scope.
Signed-off-by: Minfei Huang mhuang@redhat.com --- dracut-module-setup.sh | 20 ++++++++++++++++++++ mkdumprd | 16 +++++++++++++++- 2 files changed, 35 insertions(+), 1 deletion(-)
diff --git a/dracut-module-setup.sh b/dracut-module-setup.sh index 4641025..349c3c1 100755 --- a/dracut-module-setup.sh +++ b/dracut-module-setup.sh @@ -343,6 +343,25 @@ default_dump_target_install_conf()
}
+kdump_ipv6_netdev_fixup() +{ + local _srcaddr _tmp_conf=$1 + if is_ssh_dump_target; then + _srcaddr=$(get_option_value ssh) + elif is_nfs_dump_target; then + _srcaddr=$(get_option_value nfs) + fi + + if [ "x" != "x"$_srcaddr ] && `echo $_srcaddr | grep -q "%"`; then + local _orig_netdev=${_srcaddr#*%} + _orig_netdev=${_orig_netdev%]*} + local _pre_netdev=$(kdump_setup_ifname $_orig_netdev) + if [ "x"$_orig_netdev != "x"$_pre_netdev ]; then + sed -i "s#$_orig_netdev#$_pre_netdev#" $_tmp_conf + fi + fi +} + #install kdump.conf and what user specifies in kdump.conf kdump_install_conf() { sed -ne '/^#/!p' /etc/kdump.conf > ${initdir}/tmp/$$-kdump.conf @@ -357,6 +376,7 @@ kdump_install_conf() { ;; ssh|nfs) kdump_install_net "$config_val" + kdump_ipv6_netdev_fixup "${initdir}/tmp/$$-kdump.conf" ;; kdump_pre|kdump_post|extra_bins) dracut_install $config_val diff --git a/mkdumprd b/mkdumprd index 4d251ba..34bed63 100644 --- a/mkdumprd +++ b/mkdumprd @@ -78,8 +78,22 @@ add_dracut_module() { add_dracut_arg "--add" "$1" }
+# The ipv6 link scope which appends the netdevice to identify the ipv6 +# address is start with prefix "fe80", so we should correct the mount +# parameter to add the prefix "kdump-" before ethX. add_dracut_mount() { - add_dracut_arg "--mount" "$1" + local _val="$1" + + if is_nfs_dump_target; then + if `echo "$_val" | grep -q "^[fe80"`; then + local _prefix="${_val%%%*}" + local _netdev="${_val#*%}" + _netdev=$(kdump_setup_ifname "$_netdev") + _val="$_prefix"%"$_netdev" + fi + fi + + add_dracut_arg "--mount" "$_val" }
add_dracut_sshkey() {
On 03/10/15 at 06:48pm, Minfei Huang wrote:
The ipv6 link scope (like: fe80::fab1:56ff:feb6:56d5%eth1) needs to append the netdevice to identify the ipv6 address.
Due to add prefix "kdump-" before ethX(commit: ba7660f) in the 2nd kernel, we should correct the mount parameter and /etc/kdump.conf to add the prefix "kdump-" before ethX, if use the ipv6 link scope.
Signed-off-by: Minfei Huang mhuang@redhat.com
dracut-module-setup.sh | 20 ++++++++++++++++++++ mkdumprd | 16 +++++++++++++++- 2 files changed, 35 insertions(+), 1 deletion(-)
diff --git a/dracut-module-setup.sh b/dracut-module-setup.sh index 4641025..349c3c1 100755 --- a/dracut-module-setup.sh +++ b/dracut-module-setup.sh @@ -343,6 +343,25 @@ default_dump_target_install_conf()
}
Add a description comment for the function should be good for reading.
Descript what it is the purpose of the function, it accept what type of arguments. Give an example for an ipv6 address (before and after changing)
Otherwise the patch looks good to me..
+kdump_ipv6_netdev_fixup() +{
- local _srcaddr _tmp_conf=$1
- if is_ssh_dump_target; then
_srcaddr=$(get_option_value ssh)
- elif is_nfs_dump_target; then
_srcaddr=$(get_option_value nfs)
- fi
- if [ "x" != "x"$_srcaddr ] && `echo $_srcaddr | grep -q "%"`; then
local _orig_netdev=${_srcaddr#*\%}
_orig_netdev=${_orig_netdev%]*}
local _pre_netdev=$(kdump_setup_ifname $_orig_netdev)
if [ "x"$_orig_netdev != "x"$_pre_netdev ]; then
sed -i "s#$_orig_netdev#$_pre_netdev#" $_tmp_conf
fi
- fi
+}
#install kdump.conf and what user specifies in kdump.conf kdump_install_conf() { sed -ne '/^#/!p' /etc/kdump.conf > ${initdir}/tmp/$$-kdump.conf @@ -357,6 +376,7 @@ kdump_install_conf() { ;; ssh|nfs) kdump_install_net "$config_val"
kdump_ipv6_netdev_fixup "${initdir}/tmp/$$-kdump.conf" ;; kdump_pre|kdump_post|extra_bins) dracut_install $config_val
diff --git a/mkdumprd b/mkdumprd index 4d251ba..34bed63 100644 --- a/mkdumprd +++ b/mkdumprd @@ -78,8 +78,22 @@ add_dracut_module() { add_dracut_arg "--add" "$1" }
+# The ipv6 link scope which appends the netdevice to identify the ipv6 +# address is start with prefix "fe80", so we should correct the mount +# parameter to add the prefix "kdump-" before ethX. add_dracut_mount() {
- add_dracut_arg "--mount" "$1"
- local _val="$1"
- if is_nfs_dump_target; then
if `echo "$_val" | grep -q "^\[fe80"`; then
local _prefix="${_val%%\%*}"
local _netdev="${_val#*\%}"
_netdev=$(kdump_setup_ifname "$_netdev")
_val="$_prefix"%"$_netdev"
fi
- fi
- add_dracut_arg "--mount" "$_val"
}
add_dracut_sshkey() {
1.9.3
kexec mailing list kexec@lists.fedoraproject.org https://lists.fedoraproject.org/mailman/listinfo/kexec
The ipv6 address has the special character colon ":", so we can use the new function to pick it out. We can use the new function to parse the passed parameter. The passed parameter is hostname/domain, if it is satisfied with the condition that it is without colon ":", and contanis the [a-zA-Z].
Add a new function to simplify to get the ip address, if the specified address is a domain/hostname in /etc/kdump.conf. The function will parse the passed parameter, and use the "getent ahost" to get the ip address, if passed parameter is domain/hostname.
Signed-off-by: Minfei Huang mhuang@redhat.com --- dracut-module-setup.sh | 1 + kdump-lib.sh | 62 +++++++++++++++++++++++++++++++++++++++++--------- 2 files changed, 52 insertions(+), 11 deletions(-)
diff --git a/dracut-module-setup.sh b/dracut-module-setup.sh index 349c3c1..564f3e3 100755 --- a/dracut-module-setup.sh +++ b/dracut-module-setup.sh @@ -625,6 +625,7 @@ install() { inst "/bin/dd" "/bin/dd" inst "/bin/tail" "/bin/tail" inst "/bin/date" "/bin/date" + inst "/bin/getent" "/bin/getent" inst "/bin/sync" "/bin/sync" inst "/bin/cut" "/bin/cut" inst "/sbin/makedumpfile" "/sbin/makedumpfile" diff --git a/kdump-lib.sh b/kdump-lib.sh index b886c5d..62c7d1c 100755 --- a/kdump-lib.sh +++ b/kdump-lib.sh @@ -170,21 +170,61 @@ get_remote_host() echo $_config_val }
-# check the remote server ip address tpye -is_ipv6_target() +# wrap a function, so that we can use this function to get the ip address, +# if pass a parameter +get_ip_address() { - local _server _server_tmp + local _ip_address + + _ip_address=`getent ahosts $1 | head -n 1 | cut -d' ' -f1` + _ip_address=${_ip_address:-$1} + echo $_ip_address +} + +# the ipv6 address has the special character colon ":", so we can pick it out. +# we can pass a ip address, if ipv6 address, will return ipv6 address, +# otherwise return NULL +is_ipv6_address() +{ + local _server=$(get_ip_address $1) + echo $_server | grep -q ":" +} + +get_netdev_target() +{ + local _target
if is_ssh_dump_target; then - _server=`get_option_value ssh` + _target=`get_option_value ssh` elif is_nfs_dump_target; then - _server=`get_option_value nfs` + _target=`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 ":" + [ -z "$_target" ] && return + + _target=`get_remote_host $_target` + echo $_target +} + +# check the remote server ip address tpye +is_ipv6_target() +{ + local _target=$(get_netdev_target) + + [ -z "$_target" ] && return 1 + echo $(is_ipv6_address $_target) +} + +# if the passed parameter is hostname/domain, it will be satisfied with +# condition which it is without colon ":", and contains the [a-zA-Z] +is_hostname() +{ + local _hostname=`echo $1 | grep ":"` + +# ipv6 address + if [ -n "$_hostname" ]; then + return 1 + else + echo $1 | grep -q "[a-zA-Z]" + fi }
On 03/10/15 at 06:48pm, Minfei Huang wrote:
The ipv6 address has the special character colon ":", so we can use the new function to pick it out. We can use the new function to parse the passed parameter. The passed parameter is hostname/domain, if it is satisfied with the condition that it is without colon ":", and contanis the [a-zA-Z].
Add a new function to simplify to get the ip address, if the specified address is a domain/hostname in /etc/kdump.conf. The function will parse the passed parameter, and use the "getent ahost" to get the ip address, if passed parameter is domain/hostname.
Signed-off-by: Minfei Huang mhuang@redhat.com
dracut-module-setup.sh | 1 + kdump-lib.sh | 62 +++++++++++++++++++++++++++++++++++++++++--------- 2 files changed, 52 insertions(+), 11 deletions(-)
diff --git a/dracut-module-setup.sh b/dracut-module-setup.sh index 349c3c1..564f3e3 100755 --- a/dracut-module-setup.sh +++ b/dracut-module-setup.sh @@ -625,6 +625,7 @@ install() { inst "/bin/dd" "/bin/dd" inst "/bin/tail" "/bin/tail" inst "/bin/date" "/bin/date"
- inst "/bin/getent" "/bin/getent" inst "/bin/sync" "/bin/sync" inst "/bin/cut" "/bin/cut" inst "/sbin/makedumpfile" "/sbin/makedumpfile"
diff --git a/kdump-lib.sh b/kdump-lib.sh index b886c5d..62c7d1c 100755 --- a/kdump-lib.sh +++ b/kdump-lib.sh @@ -170,21 +170,61 @@ get_remote_host() echo $_config_val }
-# check the remote server ip address tpye -is_ipv6_target() +# wrap a function, so that we can use this function to get the ip address, +# if pass a parameter
How about: # Convert hostname to ip address, echo the original value if $1 is already an # ip address. # $1: hostname or ip address
+get_ip_address() {
- local _server _server_tmp
- local _ip_address
- _ip_address=`getent ahosts $1 | head -n 1 | cut -d' ' -f1`
- _ip_address=${_ip_address:-$1}
- echo $_ip_address
+}
+# the ipv6 address has the special character colon ":", so we can pick it out. +# we can pass a ip address, if ipv6 address, will return ipv6 address, +# otherwise return NULL
It does not return anything, it just echo $_server, btw since the function is simple and straitforward, the description is not necessary.
Since the input is possible hostname, how about change the function name to is_ipv6_host()
+is_ipv6_address() +{
- local _server=$(get_ip_address $1)
_addr is better than _server..
- echo $_server | grep -q ":"
+}
+get_netdev_target()
get_net_target or get_network_target is better..
+{
local _target
if is_ssh_dump_target; then
_server=`get_option_value ssh`
elif is_nfs_dump_target; then_target=`get_option_value ssh`
_server=`get_option_value nfs`
fi_target=`get_option_value nfs`
- [ -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 ":"
- [ -z "$_target" ] && return
- _target=`get_remote_host $_target`
- echo $_target
+}
+# check the remote server ip address tpye +is_ipv6_target() +{
- local _target=$(get_netdev_target)
- [ -z "$_target" ] && return 1
- echo $(is_ipv6_address $_target)
+}
+# if the passed parameter is hostname/domain, it will be satisfied with +# condition which it is without colon ":", and contains the [a-zA-Z]
What is the purpose of this function? What is the input? $1 = a hostname? or an ip address? or ssh/nfs option value in kdump.conf?
Is it used in later patches?
+is_hostname() +{
- local _hostname=`echo $1 | grep ":"`
+# ipv6 address
- if [ -n "$_hostname" ]; then
return 1
- else
echo $1 | grep -q "[a-zA-Z]"
- fi
}
1.9.3
kexec mailing list kexec@lists.fedoraproject.org https://lists.fedoraproject.org/mailman/listinfo/kexec
On 03/11/15 at 02:03pm, Dave Young wrote:
On 03/10/15 at 06:48pm, Minfei Huang wrote:
The ipv6 address has the special character colon ":", so we can use the new function to pick it out. We can use the new function to parse the passed parameter. The passed parameter is hostname/domain, if it is satisfied with the condition that it is without colon ":", and contanis the [a-zA-Z].
Add a new function to simplify to get the ip address, if the specified address is a domain/hostname in /etc/kdump.conf. The function will parse the passed parameter, and use the "getent ahost" to get the ip address, if passed parameter is domain/hostname.
Signed-off-by: Minfei Huang mhuang@redhat.com
dracut-module-setup.sh | 1 + kdump-lib.sh | 62 +++++++++++++++++++++++++++++++++++++++++--------- 2 files changed, 52 insertions(+), 11 deletions(-)
diff --git a/dracut-module-setup.sh b/dracut-module-setup.sh index 349c3c1..564f3e3 100755 --- a/dracut-module-setup.sh +++ b/dracut-module-setup.sh @@ -625,6 +625,7 @@ install() { inst "/bin/dd" "/bin/dd" inst "/bin/tail" "/bin/tail" inst "/bin/date" "/bin/date"
- inst "/bin/getent" "/bin/getent" inst "/bin/sync" "/bin/sync" inst "/bin/cut" "/bin/cut" inst "/sbin/makedumpfile" "/sbin/makedumpfile"
diff --git a/kdump-lib.sh b/kdump-lib.sh index b886c5d..62c7d1c 100755 --- a/kdump-lib.sh +++ b/kdump-lib.sh @@ -170,21 +170,61 @@ get_remote_host() echo $_config_val }
-# check the remote server ip address tpye -is_ipv6_target() +# wrap a function, so that we can use this function to get the ip address, +# if pass a parameter
How about: # Convert hostname to ip address, echo the original value if $1 is already an # ip address. # $1: hostname or ip address
will change.
+get_ip_address() {
- local _server _server_tmp
- local _ip_address
- _ip_address=`getent ahosts $1 | head -n 1 | cut -d' ' -f1`
- _ip_address=${_ip_address:-$1}
- echo $_ip_address
+}
+# the ipv6 address has the special character colon ":", so we can pick it out. +# we can pass a ip address, if ipv6 address, will return ipv6 address, +# otherwise return NULL
It does not return anything, it just echo $_server, btw since the function is simple and straitforward, the description is not necessary.
Since the input is possible hostname, how about change the function name to is_ipv6_host()
will change.
+is_ipv6_address() +{
- local _server=$(get_ip_address $1)
_addr is better than _server..
- echo $_server | grep -q ":"
+}
+get_netdev_target()
get_net_target or get_network_target is better..
+{
local _target
if is_ssh_dump_target; then
_server=`get_option_value ssh`
elif is_nfs_dump_target; then_target=`get_option_value ssh`
_server=`get_option_value nfs`
fi_target=`get_option_value nfs`
- [ -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 ":"
- [ -z "$_target" ] && return
- _target=`get_remote_host $_target`
- echo $_target
+}
+# check the remote server ip address tpye +is_ipv6_target() +{
- local _target=$(get_netdev_target)
- [ -z "$_target" ] && return 1
- echo $(is_ipv6_address $_target)
+}
+# if the passed parameter is hostname/domain, it will be satisfied with +# condition which it is without colon ":", and contains the [a-zA-Z]
What is the purpose of this function? What is the input? $1 = a hostname? or an ip address? or ssh/nfs option value in kdump.conf?
The input is a hostname. We use it to verify the input is hostname or not.
Is it used in later patches?
Yes, the later patch will use it. I will move it to the later patch.
Thanks Minfei
+is_hostname() +{
- local _hostname=`echo $1 | grep ":"`
+# ipv6 address
- if [ -n "$_hostname" ]; then
return 1
- else
echo $1 | grep -q "[a-zA-Z]"
- fi
}
1.9.3
kexec mailing list kexec@lists.fedoraproject.org https://lists.fedoraproject.org/mailman/listinfo/kexec
+# check the remote server ip address tpye +is_ipv6_target() +{
- local _target=$(get_netdev_target)
- [ -z "$_target" ] && return 1
- echo $(is_ipv6_address $_target)
+}
+# if the passed parameter is hostname/domain, it will be satisfied with +# condition which it is without colon ":", and contains the [a-zA-Z]
What is the purpose of this function? What is the input? $1 = a hostname? or an ip address? or ssh/nfs option value in kdump.conf?
The input is a hostname. We use it to verify the input is hostname or not.
Sorry that I put comment above the function, I means is_hostname instead of is_ipv6_target
Please add description for $1, it is not obvious here.
Is it used in later patches?
Yes, the later patch will use it. I will move it to the later patch.
Thanks Minfei
+is_hostname() +{
- local _hostname=`echo $1 | grep ":"`
+# ipv6 address
- if [ -n "$_hostname" ]; then
return 1
- else
echo $1 | grep -q "[a-zA-Z]"
- fi
}
1.9.3
kexec mailing list kexec@lists.fedoraproject.org https://lists.fedoraproject.org/mailman/listinfo/kexec
On 03/11/15 at 04:24pm, Dave Young wrote:
+# check the remote server ip address tpye +is_ipv6_target() +{
- local _target=$(get_netdev_target)
- [ -z "$_target" ] && return 1
- echo $(is_ipv6_address $_target)
+}
+# if the passed parameter is hostname/domain, it will be satisfied with +# condition which it is without colon ":", and contains the [a-zA-Z]
What is the purpose of this function? What is the input? $1 = a hostname? or an ip address? or ssh/nfs option value in kdump.conf?
The input is a hostname. We use it to verify the input is hostname or not.
Sorry that I put comment above the function, I means is_hostname instead of is_ipv6_target
Please add description for $1, it is not obvious here.
Will do.
Thanks Minfei
Is it used in later patches?
Yes, the later patch will use it. I will move it to the later patch.
Thanks Minfei
+is_hostname() +{
- local _hostname=`echo $1 | grep ":"`
+# ipv6 address
- if [ -n "$_hostname" ]; then
return 1
- else
echo $1 | grep -q "[a-zA-Z]"
- fi
}
1.9.3
kexec mailing list kexec@lists.fedoraproject.org https://lists.fedoraproject.org/mailman/listinfo/kexec
In general, the dracut will setup the ipv4 or ipv6 mode exclusively, If we specify the config to use the ssh or nfs to dump the core.
Modify the function to get the first filered ip address as the dumping directory, and does not concern the ip address is ipv4 or ipv6.
Signed-off-by: Minfei Huang mhuang@redhat.com Acked-by: Baoquan He bhe@redhat.com --- dracut-kdump.sh | 4 ++-- dracut-module-setup.sh | 1 + 2 files changed, 3 insertions(+), 2 deletions(-)
diff --git a/dracut-kdump.sh b/dracut-kdump.sh index fa8908f..db3af7a 100755 --- a/dracut-kdump.sh +++ b/dracut-kdump.sh @@ -114,9 +114,9 @@ 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=`echo $_host | head -n 1 | cut -d' ' -f2` _host="${_host%%/*}" [ -z "$_host" ] && echo "kdump: wrong kdumpnic: $kdumpnic" && return 1 HOST_IP=$_host diff --git a/dracut-module-setup.sh b/dracut-module-setup.sh index 564f3e3..9381996 100755 --- a/dracut-module-setup.sh +++ b/dracut-module-setup.sh @@ -626,6 +626,7 @@ install() { inst "/bin/tail" "/bin/tail" inst "/bin/date" "/bin/date" inst "/bin/getent" "/bin/getent" + inst "/bin/head" "/bin/head" inst "/bin/sync" "/bin/sync" inst "/bin/cut" "/bin/cut" inst "/sbin/makedumpfile" "/sbin/makedumpfile"
On 03/10/15 at 06:48pm, Minfei Huang wrote:
In general, the dracut will setup the ipv4 or ipv6 mode exclusively, If we specify the config to use the ssh or nfs to dump the core.
Modify the function to get the first filered ip address as the dumping directory, and does not concern the ip address is ipv4 or ipv6.
Signed-off-by: Minfei Huang mhuang@redhat.com Acked-by: Baoquan He bhe@redhat.com
For the time being, it is ok.
ACK
dracut-kdump.sh | 4 ++-- dracut-module-setup.sh | 1 + 2 files changed, 3 insertions(+), 2 deletions(-)
diff --git a/dracut-kdump.sh b/dracut-kdump.sh index fa8908f..db3af7a 100755 --- a/dracut-kdump.sh +++ b/dracut-kdump.sh @@ -114,9 +114,9 @@ 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=`echo $_host | head -n 1 | cut -d' ' -f2` _host="${_host%%/*}" [ -z "$_host" ] && echo "kdump: wrong kdumpnic: $kdumpnic" && return 1 HOST_IP=$_host
diff --git a/dracut-module-setup.sh b/dracut-module-setup.sh index 564f3e3..9381996 100755 --- a/dracut-module-setup.sh +++ b/dracut-module-setup.sh @@ -626,6 +626,7 @@ install() { inst "/bin/tail" "/bin/tail" inst "/bin/date" "/bin/date" inst "/bin/getent" "/bin/getent"
- inst "/bin/head" "/bin/head" inst "/bin/sync" "/bin/sync" inst "/bin/cut" "/bin/cut" inst "/sbin/makedumpfile" "/sbin/makedumpfile"
-- 1.9.3
kexec mailing list kexec@lists.fedoraproject.org https://lists.fedoraproject.org/mailman/listinfo/kexec
In order to enhance kdump to support ipv6, support the static route with ipv6, which ipv4 has supported already.
Due to the different format with ipv4 and ipv6, dracut uses bracket "[]" to quote the ipv6 address to identify it in the 2nd kernel.
Signed-off-by: Minfei Huang mhuang@redhat.com Acked-by: Baoquan He bhe@redhat.com --- dracut-module-setup.sh | 50 ++++++++++++++++++++++++++++++++++---------------- 1 file changed, 34 insertions(+), 16 deletions(-)
diff --git a/dracut-module-setup.sh b/dracut-module-setup.sh index 9381996..95b73f8 100755 --- a/dracut-module-setup.sh +++ b/dracut-module-setup.sh @@ -195,27 +195,45 @@ kdump_setup_znet() { echo rd.znet=${NETTYPE},${SUBCHANNELS}${_options} > ${initdir}/etc/cmdline.d/30znet.conf }
+# +# For the same subnet region, following is the route format +# ipv4: +# _route='192.168.200.137 dev eth1 src 192.168.200.129 +# cache ' +# ipv6: +# _route='2001:11::11f from :: dev eth1 src 2001:11::120 metric 0 +# cache' +# For the different subnet region, following is the route format +# ipv4: +# _route='192.168.201.215 via 192.168.200.137 dev eth1 src 192.168.200.129 +# cache ' +# ipv6: +# _route='2001:10::120 from :: via 2001:11::11f dev eth1 src 2001:11::120 metric 0 +# cache' get_routes() { local _netdev="$1" _target="$2" local _route _nexthop
- _route=`/sbin/ip route get to $_target 2>&1` -# -# in the same subnet region, following is the route format -# _route='192.168.200.137 dev eth1 src 192.168.200.129 -# cache ' -# -# in the different subnet region, following is the route format -# _route='192.168.201.215 via 192.168.200.137 dev eth1 src 192.168.200.129 -# cache ' -# - if `echo $_route | grep -q "via"`; then - # route going to a different subnet via a router - _nexthop=`echo $_route | awk '{print $3}'` - fi - _netdev=$(kdump_setup_ifname $_netdev) + if is_ipv6_address $_target; then + _route=`/sbin/ip -6 route get to $_target 2>&1` + _netdev=$(kdump_setup_ifname $_netdev) + if `echo $_route | grep -q "via"`; then + # route going to a different subnet via a router + _nexthop=`echo $_route | awk '{print $5}'` + echo "rd.route=[$_target]:[$_nexthop]:$_netdev" >> ${initdir}/etc/cmdline.d/45route-static.conf + else + echo "rd.route=[$_target]::$_netdev" >> ${initdir}/etc/cmdline.d/45route-static.conf + fi + else + _route=`/sbin/ip route get to $_target 2>&1` + if `echo $_route | grep -q "via"`; then + # route going to a different subnet via a router + _nexthop=`echo $_route | awk '{print $3}'` + fi + _netdev=$(kdump_setup_ifname $_netdev)
- echo "rd.route=$_target:$_nexthop:$_netdev" >> ${initdir}/etc/cmdline.d/45route-static.conf + echo "rd.route=$_target:$_nexthop:$_netdev" >> ${initdir}/etc/cmdline.d/45route-static.conf + fi }
# Setup dracut to bringup a given network interface
On 03/10/15 at 06:48pm, Minfei Huang wrote:
In order to enhance kdump to support ipv6, support the static route with ipv6, which ipv4 has supported already.
Due to the different format with ipv4 and ipv6, dracut uses bracket "[]" to quote the ipv6 address to identify it in the 2nd kernel.
Signed-off-by: Minfei Huang mhuang@redhat.com Acked-by: Baoquan He bhe@redhat.com
From code structure point of view
ACK
dracut-module-setup.sh | 50 ++++++++++++++++++++++++++++++++++---------------- 1 file changed, 34 insertions(+), 16 deletions(-)
diff --git a/dracut-module-setup.sh b/dracut-module-setup.sh index 9381996..95b73f8 100755 --- a/dracut-module-setup.sh +++ b/dracut-module-setup.sh @@ -195,27 +195,45 @@ kdump_setup_znet() { echo rd.znet=${NETTYPE},${SUBCHANNELS}${_options} > ${initdir}/etc/cmdline.d/30znet.conf }
+# +# For the same subnet region, following is the route format +# ipv4: +# _route='192.168.200.137 dev eth1 src 192.168.200.129 +# cache ' +# ipv6: +# _route='2001:11::11f from :: dev eth1 src 2001:11::120 metric 0 +# cache' +# For the different subnet region, following is the route format +# ipv4: +# _route='192.168.201.215 via 192.168.200.137 dev eth1 src 192.168.200.129 +# cache ' +# ipv6: +# _route='2001:10::120 from :: via 2001:11::11f dev eth1 src 2001:11::120 metric 0 +# cache' get_routes() { local _netdev="$1" _target="$2" local _route _nexthop
- _route=`/sbin/ip route get to $_target 2>&1`
-# -# in the same subnet region, following is the route format -# _route='192.168.200.137 dev eth1 src 192.168.200.129 -# cache ' -# -# in the different subnet region, following is the route format -# _route='192.168.201.215 via 192.168.200.137 dev eth1 src 192.168.200.129 -# cache ' -#
- if `echo $_route | grep -q "via"`; then
# route going to a different subnet via a router
_nexthop=`echo $_route | awk '{print $3}'`
- fi
- _netdev=$(kdump_setup_ifname $_netdev)
- if is_ipv6_address $_target; then
_route=`/sbin/ip -6 route get to $_target 2>&1`
_netdev=$(kdump_setup_ifname $_netdev)
if `echo $_route | grep -q "via"`; then
# route going to a different subnet via a router
_nexthop=`echo $_route | awk '{print $5}'`
echo "rd.route=[$_target]:[$_nexthop]:$_netdev" >> ${initdir}/etc/cmdline.d/45route-static.conf
else
echo "rd.route=[$_target]::$_netdev" >> ${initdir}/etc/cmdline.d/45route-static.conf
fi
- else
_route=`/sbin/ip route get to $_target 2>&1`
if `echo $_route | grep -q "via"`; then
# route going to a different subnet via a router
_nexthop=`echo $_route | awk '{print $3}'`
fi
_netdev=$(kdump_setup_ifname $_netdev)
- echo "rd.route=$_target:$_nexthop:$_netdev" >> ${initdir}/etc/cmdline.d/45route-static.conf
echo "rd.route=$_target:$_nexthop:$_netdev" >> ${initdir}/etc/cmdline.d/45route-static.conf
- fi
}
# Setup dracut to bringup a given network interface
1.9.3
kexec mailing list kexec@lists.fedoraproject.org https://lists.fedoraproject.org/mailman/listinfo/kexec
In order to enhance kdump to support ipv6, support the static ip with ipv6, which ipv4 has supported already.
Due to the different format with ipv4 and ipv6, dracut uses bracket"[]" to quote the ipv6 address to identify it in the 2nd kernel.
Signed-off-by: Minfei Huang mhuang@redhat.com --- dracut-module-setup.sh | 23 +++++++++++++++++------ 1 file changed, 17 insertions(+), 6 deletions(-)
diff --git a/dracut-module-setup.sh b/dracut-module-setup.sh index 95b73f8..f82aac7 100755 --- a/dracut-module-setup.sh +++ b/dracut-module-setup.sh @@ -74,14 +74,25 @@ kdump_setup_dns() { #$2: srcaddr #if it use static ip echo it, or echo null kdump_static_ip() { - local _netmask _gateway + local _netmask _gateway _ipaddr local _netdev="$1" _srcaddr="$2" - local _ipaddr=$(ip addr show dev $_netdev permanent | \ + + if is_ipv6_address $_srcaddr; then + _ipaddr=$(ip -6 addr show dev $_netdev permanent | \ + awk "/ $_srcaddr/.* /{print $2}") + if [ -n "$_ipaddr" ]; then + _netmask=${_ipaddr#*/} + _gateway=$(ip -6 route list dev $_netdev | awk '/^default /{print $3}') + echo -n "[${_srcaddr}]::[${_gateway}]:${_netmask}::" + fi + else + _ipaddr=$(ip addr show dev $_netdev permanent | \ awk "/ $_srcaddr/.* $_netdev$/{print $2}") - if [ -n "$_ipaddr" ]; then - _netmask=$(ipcalc -m $_ipaddr | cut -d'=' -f2) - _gateway=$(ip route list dev $_netdev | awk '/^default /{print $3}') - echo -n "${_srcaddr}::${_gateway}:${_netmask}::" + if [ -n "$_ipaddr" ]; then + _netmask=$(ipcalc -m $_ipaddr | cut -d'=' -f2) + _gateway=$(ip route list dev $_netdev | awk '/^default /{print $3}') + echo -n "${_srcaddr}::${_gateway}:${_netmask}::" + fi fi }
On 03/10/15 at 06:48pm, Minfei Huang wrote:
In order to enhance kdump to support ipv6, support the static ip with ipv6, which ipv4 has supported already.
Due to the different format with ipv4 and ipv6, dracut uses bracket"[]" to quote the ipv6 address to identify it in the 2nd kernel.
Looks good to me except one question below: Do we need fixup dev name with prefix kdump- in ipv6 path?
Signed-off-by: Minfei Huang mhuang@redhat.com
dracut-module-setup.sh | 23 +++++++++++++++++------ 1 file changed, 17 insertions(+), 6 deletions(-)
diff --git a/dracut-module-setup.sh b/dracut-module-setup.sh index 95b73f8..f82aac7 100755 --- a/dracut-module-setup.sh +++ b/dracut-module-setup.sh @@ -74,14 +74,25 @@ kdump_setup_dns() { #$2: srcaddr #if it use static ip echo it, or echo null kdump_static_ip() {
- local _netmask _gateway
- local _netmask _gateway _ipaddr local _netdev="$1" _srcaddr="$2"
- local _ipaddr=$(ip addr show dev $_netdev permanent | \
- if is_ipv6_address $_srcaddr; then
_ipaddr=$(ip -6 addr show dev $_netdev permanent | \
awk "/ $_srcaddr\/.* /{print \$2}")
if [ -n "$_ipaddr" ]; then
_netmask=${_ipaddr#*\/}
_gateway=$(ip -6 route list dev $_netdev | awk '/^default /{print $3}')
echo -n "[${_srcaddr}]::[${_gateway}]:${_netmask}::"
fi
- else
_ipaddr=$(ip addr show dev $_netdev permanent | \ awk "/ $_srcaddr\/.* $_netdev\$/{print \$2}")
- if [ -n "$_ipaddr" ]; then
_netmask=$(ipcalc -m $_ipaddr | cut -d'=' -f2)
_gateway=$(ip route list dev $_netdev | awk '/^default /{print $3}')
echo -n "${_srcaddr}::${_gateway}:${_netmask}::"
if [ -n "$_ipaddr" ]; then
_netmask=$(ipcalc -m $_ipaddr | cut -d'=' -f2)
_gateway=$(ip route list dev $_netdev | awk '/^default /{print $3}')
echo -n "${_srcaddr}::${_gateway}:${_netmask}::"
fifi
}
-- 1.9.3
kexec mailing list kexec@lists.fedoraproject.org https://lists.fedoraproject.org/mailman/listinfo/kexec
On 03/11/15 at 02:10pm, Dave Young wrote:
On 03/10/15 at 06:48pm, Minfei Huang wrote:
In order to enhance kdump to support ipv6, support the static ip with ipv6, which ipv4 has supported already.
Due to the different format with ipv4 and ipv6, dracut uses bracket"[]" to quote the ipv6 address to identify it in the 2nd kernel.
Looks good to me except one question below: Do we need fixup dev name with prefix kdump- in ipv6 path?
You means to fixup the $_srcaddr, if the ipv6 address is local-link?
Network will use command "ip -6 addr add fe80::5054:ff:fe0e:d5a8/64 dev eth1" to add the local-link. So it is fine for the ipv6 address without the prefix "kdump-".
Thanks Minfei
Signed-off-by: Minfei Huang mhuang@redhat.com
dracut-module-setup.sh | 23 +++++++++++++++++------ 1 file changed, 17 insertions(+), 6 deletions(-)
diff --git a/dracut-module-setup.sh b/dracut-module-setup.sh index 95b73f8..f82aac7 100755 --- a/dracut-module-setup.sh +++ b/dracut-module-setup.sh @@ -74,14 +74,25 @@ kdump_setup_dns() { #$2: srcaddr #if it use static ip echo it, or echo null kdump_static_ip() {
- local _netmask _gateway
- local _netmask _gateway _ipaddr local _netdev="$1" _srcaddr="$2"
- local _ipaddr=$(ip addr show dev $_netdev permanent | \
- if is_ipv6_address $_srcaddr; then
_ipaddr=$(ip -6 addr show dev $_netdev permanent | \
awk "/ $_srcaddr\/.* /{print \$2}")
if [ -n "$_ipaddr" ]; then
_netmask=${_ipaddr#*\/}
_gateway=$(ip -6 route list dev $_netdev | awk '/^default /{print $3}')
echo -n "[${_srcaddr}]::[${_gateway}]:${_netmask}::"
fi
- else
_ipaddr=$(ip addr show dev $_netdev permanent | \ awk "/ $_srcaddr\/.* $_netdev\$/{print \$2}")
- if [ -n "$_ipaddr" ]; then
_netmask=$(ipcalc -m $_ipaddr | cut -d'=' -f2)
_gateway=$(ip route list dev $_netdev | awk '/^default /{print $3}')
echo -n "${_srcaddr}::${_gateway}:${_netmask}::"
if [ -n "$_ipaddr" ]; then
_netmask=$(ipcalc -m $_ipaddr | cut -d'=' -f2)
_gateway=$(ip route list dev $_netdev | awk '/^default /{print $3}')
echo -n "${_srcaddr}::${_gateway}:${_netmask}::"
fifi
}
-- 1.9.3
kexec mailing list kexec@lists.fedoraproject.org https://lists.fedoraproject.org/mailman/listinfo/kexec
On 03/11/15 at 04:38pm, Minfei Huang wrote:
On 03/11/15 at 02:10pm, Dave Young wrote:
On 03/10/15 at 06:48pm, Minfei Huang wrote:
In order to enhance kdump to support ipv6, support the static ip with ipv6, which ipv4 has supported already.
Due to the different format with ipv4 and ipv6, dracut uses bracket"[]" to quote the ipv6 address to identify it in the 2nd kernel.
Looks good to me except one question below: Do we need fixup dev name with prefix kdump- in ipv6 path?
You means to fixup the $_srcaddr, if the ipv6 address is local-link?
Network will use command "ip -6 addr add fe80::5054:ff:fe0e:d5a8/64 dev eth1" to add the local-link. So it is fine for the ipv6 address without the prefix "kdump-".
Ok, so we will pass right kdump-ethX to 2nd kernel in other place then dracut will assign an ip to it, if this is the case. I'm fine with it.
Thanks Dave
Currently kdump doesn't support ipv6 nfs/ssh dump. Due to the lastet version of the Internet Protocal, it is a significant feature for kdump to enhance to support ipv6.
Following is the special config for ipv6 protocal.
For ipv6 nfs dump: Link scope, /etc/kdump.conf should be specified like "nfs [fe80::5054:ff:fe48:ca80%eth0]:/mnt" otherwise "nfs [2001:db8:0:f101::2]:/mnt"
For ipv6 ssh dump: Link scope, /etc/kdump.conf should be edited like "ssh root at fe80::5054:ff:fe48:ca80%eth0" otherwise "ssh root at 2001:db8:0:f101::2"
Signed-off-by: Minfei Huang mhuang@redhat.com --- dracut-module-setup.sh | 46 +++++++++++++++++++++++++++++----------------- 1 file changed, 29 insertions(+), 17 deletions(-)
diff --git a/dracut-module-setup.sh b/dracut-module-setup.sh index f82aac7..4ac4c8f 100755 --- a/dracut-module-setup.sh +++ b/dracut-module-setup.sh @@ -301,24 +301,36 @@ kdump_install_net() { local _server _netdev _srcaddr local config_val="$1"
- _server=`echo $config_val | sed 's/.*@//' | cut -d':' -f1` - - _need_dns=`echo $_server|grep "[a-zA-Z]"` - [ -n "$_need_dns" ] && _server=`getent hosts $_server|cut -d' ' -f1` - - _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`" ] - then - # we are going to a different subnet - _srcaddr=`echo $_netdev|awk '{print $7}'|head -n 1` - _netdev=`echo $_netdev|awk '{print $5;}'|head -n 1` + _server=`get_remote_host $config_val` + + is_hostname $_server && _server=`getent ahosts $_server|cut -d' ' -f1` + + if is_ipv6_address $_server; then + _netdev=`/sbin/ip -6 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`" ]; then + # we are going to a different subnet + _srcaddr=`echo $_netdev|awk '{print $9}'|head -n 1` + _netdev=`echo $_netdev|awk '{print $7;}'|head -n 1` + else + # we are on the same subnet + _srcaddr=`echo $_netdev|awk '{print $7}'|head -n 1` + _netdev=`echo $_netdev|awk '{print $5}'|head -n 1` + fi else - # we are on the same subnet - _srcaddr=`echo $_netdev|awk '{print $5}'|head -n 1` - _netdev=`echo $_netdev|awk '{print $3}'|head -n 1` + _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`" ]; then + # we are going to a different subnet + _srcaddr=`echo $_netdev|awk '{print $7}'|head -n 1` + _netdev=`echo $_netdev|awk '{print $5;}'|head -n 1` + else + # we are on the same subnet + _srcaddr=`echo $_netdev|awk '{print $5}'|head -n 1` + _netdev=`echo $_netdev|awk '{print $3}'|head -n 1` + fi fi
kdump_setup_netdev "${_netdev}" "${_srcaddr}" "${_server}"
On 03/10/15 at 06:48pm, Minfei Huang wrote:
Currently kdump doesn't support ipv6 nfs/ssh dump. Due to the lastet version of the Internet Protocal, it is a significant feature for kdump to enhance to support ipv6.
Following is the special config for ipv6 protocal.
For ipv6 nfs dump: Link scope, /etc/kdump.conf should be specified like "nfs [fe80::5054:ff:fe48:ca80%eth0]:/mnt" otherwise "nfs [2001:db8:0:f101::2]:/mnt"
For ipv6 ssh dump: Link scope, /etc/kdump.conf should be edited like "ssh root at fe80::5054:ff:fe48:ca80%eth0" otherwise "ssh root at 2001:db8:0:f101::2"
The ipv6 support is splitted to several parts, so the patch subject should be change, it is too general
Also I believe it will not break original functionality if we revert part of this series?
Signed-off-by: Minfei Huang mhuang@redhat.com
dracut-module-setup.sh | 46 +++++++++++++++++++++++++++++----------------- 1 file changed, 29 insertions(+), 17 deletions(-)
diff --git a/dracut-module-setup.sh b/dracut-module-setup.sh index f82aac7..4ac4c8f 100755 --- a/dracut-module-setup.sh +++ b/dracut-module-setup.sh @@ -301,24 +301,36 @@ kdump_install_net() { local _server _netdev _srcaddr local config_val="$1"
- _server=`echo $config_val | sed 's/.*@//' | cut -d':' -f1`
- _need_dns=`echo $_server|grep "[a-zA-Z]"`
- [ -n "$_need_dns" ] && _server=`getent hosts $_server|cut -d' ' -f1`
- _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`" ]
- then
# we are going to a different subnet
_srcaddr=`echo $_netdev|awk '{print $7}'|head -n 1`
_netdev=`echo $_netdev|awk '{print $5;}'|head -n 1`
- _server=`get_remote_host $config_val`
- is_hostname $_server && _server=`getent ahosts $_server|cut -d' ' -f1`
is_hostname is used only in this patch, so it is reasonable to move the function from previous patch into this patch.
- if is_ipv6_address $_server; then
_netdev=`/sbin/ip -6 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`" ]; then
# we are going to a different subnet
_srcaddr=`echo $_netdev|awk '{print $9}'|head -n 1`
_netdev=`echo $_netdev|awk '{print $7;}'|head -n 1`
Please give an example of _netdev so that we know what is $9 and $7 Maybe one comment before "if is_ipv6_address $_server" works for latter cases..
else
# we are on the same subnet
_srcaddr=`echo $_netdev|awk '{print $7}'|head -n 1`
_netdev=`echo $_netdev|awk '{print $5}'|head -n 1`
ditto
elsefi
# we are on the same subnet
_srcaddr=`echo $_netdev|awk '{print $5}'|head -n 1`
_netdev=`echo $_netdev|awk '{print $3}'|head -n 1`
_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`" ]; then
# we are going to a different subnet
_srcaddr=`echo $_netdev|awk '{print $7}'|head -n 1`
_netdev=`echo $_netdev|awk '{print $5;}'|head -n 1`
Ditto
else
# we are on the same subnet
_srcaddr=`echo $_netdev|awk '{print $5}'|head -n 1`
_netdev=`echo $_netdev|awk '{print $3}'|head -n 1`
Ditto
fi
fi
kdump_setup_netdev "${_netdev}" "${_srcaddr}" "${_server}"
-- 1.9.3
kexec mailing list kexec@lists.fedoraproject.org https://lists.fedoraproject.org/mailman/listinfo/kexec
On 03/11/15 at 02:18pm, Dave Young wrote:
On 03/10/15 at 06:48pm, Minfei Huang wrote:
Currently kdump doesn't support ipv6 nfs/ssh dump. Due to the lastet version of the Internet Protocal, it is a significant feature for kdump to enhance to support ipv6.
Following is the special config for ipv6 protocal.
For ipv6 nfs dump: Link scope, /etc/kdump.conf should be specified like "nfs [fe80::5054:ff:fe48:ca80%eth0]:/mnt" otherwise "nfs [2001:db8:0:f101::2]:/mnt"
For ipv6 ssh dump: Link scope, /etc/kdump.conf should be edited like "ssh root at fe80::5054:ff:fe48:ca80%eth0" otherwise "ssh root at 2001:db8:0:f101::2"
The ipv6 support is splitted to several parts, so the patch subject should be change, it is too general
Also I believe it will not break original functionality if we revert part of this series?
Without this patch, kdump can not kdump to remote via ipv6 address. So I think the subject is fine.
Signed-off-by: Minfei Huang mhuang@redhat.com
dracut-module-setup.sh | 46 +++++++++++++++++++++++++++++----------------- 1 file changed, 29 insertions(+), 17 deletions(-)
diff --git a/dracut-module-setup.sh b/dracut-module-setup.sh index f82aac7..4ac4c8f 100755 --- a/dracut-module-setup.sh +++ b/dracut-module-setup.sh @@ -301,24 +301,36 @@ kdump_install_net() { local _server _netdev _srcaddr local config_val="$1"
- _server=`echo $config_val | sed 's/.*@//' | cut -d':' -f1`
- _need_dns=`echo $_server|grep "[a-zA-Z]"`
- [ -n "$_need_dns" ] && _server=`getent hosts $_server|cut -d' ' -f1`
- _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`" ]
- then
# we are going to a different subnet
_srcaddr=`echo $_netdev|awk '{print $7}'|head -n 1`
_netdev=`echo $_netdev|awk '{print $5;}'|head -n 1`
- _server=`get_remote_host $config_val`
- is_hostname $_server && _server=`getent ahosts $_server|cut -d' ' -f1`
is_hostname is used only in this patch, so it is reasonable to move the function from previous patch into this patch.
will do it.
- if is_ipv6_address $_server; then
_netdev=`/sbin/ip -6 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`" ]; then
# we are going to a different subnet
_srcaddr=`echo $_netdev|awk '{print $9}'|head -n 1`
_netdev=`echo $_netdev|awk '{print $7;}'|head -n 1`
Please give an example of _netdev so that we know what is $9 and $7 Maybe one comment before "if is_ipv6_address $_server" works for latter cases..
There is an example above the function get_routes.
Thanks Minfei
else
# we are on the same subnet
_srcaddr=`echo $_netdev|awk '{print $7}'|head -n 1`
_netdev=`echo $_netdev|awk '{print $5}'|head -n 1`
ditto
elsefi
# we are on the same subnet
_srcaddr=`echo $_netdev|awk '{print $5}'|head -n 1`
_netdev=`echo $_netdev|awk '{print $3}'|head -n 1`
_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`" ]; then
# we are going to a different subnet
_srcaddr=`echo $_netdev|awk '{print $7}'|head -n 1`
_netdev=`echo $_netdev|awk '{print $5;}'|head -n 1`
Ditto
else
# we are on the same subnet
_srcaddr=`echo $_netdev|awk '{print $5}'|head -n 1`
_netdev=`echo $_netdev|awk '{print $3}'|head -n 1`
Ditto
fi
fi
kdump_setup_netdev "${_netdev}" "${_srcaddr}" "${_server}"
-- 1.9.3
kexec mailing list kexec@lists.fedoraproject.org https://lists.fedoraproject.org/mailman/listinfo/kexec
On 03/11/15 at 03:42pm, Minfei Huang wrote:
On 03/11/15 at 02:18pm, Dave Young wrote:
On 03/10/15 at 06:48pm, Minfei Huang wrote:
Currently kdump doesn't support ipv6 nfs/ssh dump. Due to the lastet version of the Internet Protocal, it is a significant feature for kdump to enhance to support ipv6.
Following is the special config for ipv6 protocal.
For ipv6 nfs dump: Link scope, /etc/kdump.conf should be specified like "nfs [fe80::5054:ff:fe48:ca80%eth0]:/mnt" otherwise "nfs [2001:db8:0:f101::2]:/mnt"
For ipv6 ssh dump: Link scope, /etc/kdump.conf should be edited like "ssh root at fe80::5054:ff:fe48:ca80%eth0" otherwise "ssh root at 2001:db8:0:f101::2"
The ipv6 support is splitted to several parts, so the patch subject should be change, it is too general
Also I believe it will not break original functionality if we revert part of this series?
Without this patch, kdump can not kdump to remote via ipv6 address. So I think the subject is fine.
Without the previous patch kdump cannot dump to remote ipv6 as well then why only use it in this patch? A more specific subject is better.
Thanks Dave
On 03/11/15 at 04:20pm, Dave Young wrote:
On 03/11/15 at 03:42pm, Minfei Huang wrote:
On 03/11/15 at 02:18pm, Dave Young wrote:
On 03/10/15 at 06:48pm, Minfei Huang wrote:
Currently kdump doesn't support ipv6 nfs/ssh dump. Due to the lastet version of the Internet Protocal, it is a significant feature for kdump to enhance to support ipv6.
Following is the special config for ipv6 protocal.
For ipv6 nfs dump: Link scope, /etc/kdump.conf should be specified like "nfs [fe80::5054:ff:fe48:ca80%eth0]:/mnt" otherwise "nfs [2001:db8:0:f101::2]:/mnt"
For ipv6 ssh dump: Link scope, /etc/kdump.conf should be edited like "ssh root at fe80::5054:ff:fe48:ca80%eth0" otherwise "ssh root at 2001:db8:0:f101::2"
The ipv6 support is splitted to several parts, so the patch subject should be change, it is too general
Also I believe it will not break original functionality if we revert part of this series?
Without this patch, kdump can not kdump to remote via ipv6 address. So I think the subject is fine.
Without the previous patch kdump cannot dump to remote ipv6 as well then why only use it in this patch? A more specific subject is better.
Will change.
Thanks Minfei
Thanks Dave
Now the dracut does not have enough info to setup the ipv6 to connect the iscsi target in the 2nd kernel, if the iscsi connecting is ipv6 protocal.
For this patch, we will parse the iscsi connecting, pass the config to the dracut to setup the ipv6 in the 2nd kernel.
Signed-off-by: Minfei Huang mhuang@redhat.com --- dracut-module-setup.sh | 25 ++++++++++++++++++++----- 1 file changed, 20 insertions(+), 5 deletions(-)
diff --git a/dracut-module-setup.sh b/dracut-module-setup.sh index 4ac4c8f..8601933 100755 --- a/dracut-module-setup.sh +++ b/dracut-module-setup.sh @@ -484,6 +484,7 @@ kdump_get_iscsi_initiator() { kdump_setup_iscsi_device() { local path=$1 local tgt_name; local tgt_ipaddr; + local _srcaddr _prefix _netdev local username; local password; local userpwd_str; local username_in; local password_in; local userpwd_in_str; local netdev @@ -521,19 +522,33 @@ kdump_setup_iscsi_device() {
[ -n "$username_in" ] && userpwd_in_str=":$username_in:$password_in"
- netdev=$(/sbin/ip route get to ${tgt_ipaddr} | \ - sed 's|.*dev (.*).*|\1|g') + if is_ipv6_address $tgt_ipaddr; then + netdev=$(/sbin/ip -6 route get to $(get_remote_host $tgt_ipaddr) | \ + sed 's|.*dev (.*).*|\1|g') + else + netdev=$(/sbin/ip route get to ${tgt_ipaddr} | \ + sed 's|.*dev (.*).*|\1|g') + fi srcaddr=$(echo $netdev | awk '{ print $3; exit }') netdev=$(echo $netdev | awk '{ print $1; exit }')
- kdump_setup_netdev $netdev $srcaddr $tgt_ipaddr + kdump_setup_netdev $netdev $srcaddr $(get_remote_host $tgt_ipaddr)
# prepare netroot= command line - # FIXME: IPV6 addresses require explicit [] around $tgt_ipaddr # FIXME: Do we need to parse and set other parameters like protocol, port # iscsi_iface_name, netdev_name, LUN etc.
- netroot_str="netroot=iscsi:${userpwd_str}${userpwd_in_str}@$tgt_ipaddr::::$tgt_name" + if is_ipv6_address $tgt_ipaddr; then + if `echo $tgt_ipaddr | grep -q "%"`; then + _prefix=${tgt_ipaddr%%*} + _netdev=${tgt_ipaddr#*%} + _netdev=$(kdump_setup_ifname $_netdev) + tgt_ipaddr=$_prefix%$_netdev + fi + netroot_str="netroot=iscsi:${userpwd_str}${userpwd_in_str}@[$tgt_ipaddr]::::$tgt_name" + else + netroot_str="netroot=iscsi:${userpwd_str}${userpwd_in_str}@$tgt_ipaddr::::$tgt_name" + fi
[[ -f $netroot_conf ]] || touch $netroot_conf
On 03/10/15 at 06:48pm, Minfei Huang wrote:
Now the dracut does not have enough info to setup the ipv6 to connect the iscsi target in the 2nd kernel, if the iscsi connecting is ipv6 protocal.
For this patch, we will parse the iscsi connecting, pass the config to the dracut to setup the ipv6 in the 2nd kernel.
Signed-off-by: Minfei Huang mhuang@redhat.com
dracut-module-setup.sh | 25 ++++++++++++++++++++----- 1 file changed, 20 insertions(+), 5 deletions(-)
diff --git a/dracut-module-setup.sh b/dracut-module-setup.sh index 4ac4c8f..8601933 100755 --- a/dracut-module-setup.sh +++ b/dracut-module-setup.sh @@ -484,6 +484,7 @@ kdump_get_iscsi_initiator() { kdump_setup_iscsi_device() { local path=$1 local tgt_name; local tgt_ipaddr;
- local _srcaddr _prefix _netdev local username; local password; local userpwd_str; local username_in; local password_in; local userpwd_in_str; local netdev
@@ -521,19 +522,33 @@ kdump_setup_iscsi_device() {
[ -n "$username_in" ] && userpwd_in_str=":$username_in:$password_in"
- netdev=$(/sbin/ip route get to ${tgt_ipaddr} | \
sed 's|.*dev \(.*\).*|\1|g')
- if is_ipv6_address $tgt_ipaddr; then
netdev=$(/sbin/ip -6 route get to $(get_remote_host $tgt_ipaddr) | \
get_remote_host is used to remove like %eth0 at the end of the string. tgt_ipaddr is returned by iscsiadm command, I guess it maybe already an ip addr without %eth0, but I'm not sure, can you verify it? If it is true then this section in the patch can be dropped.
sed 's|.*dev \(.*\).*|\1|g')
- else
netdev=$(/sbin/ip route get to ${tgt_ipaddr} | \
sed 's|.*dev \(.*\).*|\1|g')
- fi srcaddr=$(echo $netdev | awk '{ print $3; exit }') netdev=$(echo $netdev | awk '{ print $1; exit }')
- kdump_setup_netdev $netdev $srcaddr $tgt_ipaddr
kdump_setup_netdev $netdev $srcaddr $(get_remote_host $tgt_ipaddr)
# prepare netroot= command line
# FIXME: IPV6 addresses require explicit [] around $tgt_ipaddr # FIXME: Do we need to parse and set other parameters like protocol, port # iscsi_iface_name, netdev_name, LUN etc.
netroot_str="netroot=iscsi:${userpwd_str}${userpwd_in_str}@$tgt_ipaddr::::$tgt_name"
if is_ipv6_address $tgt_ipaddr; then
if `echo $tgt_ipaddr | grep -q "%"`; then
_prefix=${tgt_ipaddr%\%*}
_netdev=${tgt_ipaddr#*\%}
_netdev=$(kdump_setup_ifname $_netdev)
tgt_ipaddr=$_prefix%$_netdev
fi
netroot_str="netroot=iscsi:${userpwd_str}${userpwd_in_str}@[$tgt_ipaddr]::::$tgt_name"
else
netroot_str="netroot=iscsi:${userpwd_str}${userpwd_in_str}@$tgt_ipaddr::::$tgt_name"
fi
[[ -f $netroot_conf ]] || touch $netroot_conf
-- 1.9.3
kexec mailing list kexec@lists.fedoraproject.org https://lists.fedoraproject.org/mailman/listinfo/kexec
On 03/11/15 at 02:33pm, Dave Young wrote:
On 03/10/15 at 06:48pm, Minfei Huang wrote:
Now the dracut does not have enough info to setup the ipv6 to connect the iscsi target in the 2nd kernel, if the iscsi connecting is ipv6 protocal.
For this patch, we will parse the iscsi connecting, pass the config to the dracut to setup the ipv6 in the 2nd kernel.
Signed-off-by: Minfei Huang mhuang@redhat.com
dracut-module-setup.sh | 25 ++++++++++++++++++++----- 1 file changed, 20 insertions(+), 5 deletions(-)
diff --git a/dracut-module-setup.sh b/dracut-module-setup.sh index 4ac4c8f..8601933 100755 --- a/dracut-module-setup.sh +++ b/dracut-module-setup.sh @@ -484,6 +484,7 @@ kdump_get_iscsi_initiator() { kdump_setup_iscsi_device() { local path=$1 local tgt_name; local tgt_ipaddr;
- local _srcaddr _prefix _netdev local username; local password; local userpwd_str; local username_in; local password_in; local userpwd_in_str; local netdev
@@ -521,19 +522,33 @@ kdump_setup_iscsi_device() {
[ -n "$username_in" ] && userpwd_in_str=":$username_in:$password_in"
- netdev=$(/sbin/ip route get to ${tgt_ipaddr} | \
sed 's|.*dev \(.*\).*|\1|g')
- if is_ipv6_address $tgt_ipaddr; then
netdev=$(/sbin/ip -6 route get to $(get_remote_host $tgt_ipaddr) | \
get_remote_host is used to remove like %eth0 at the end of the string. tgt_ipaddr is returned by iscsiadm command, I guess it maybe already an ip addr without %eth0, but I'm not sure, can you verify it? If it is true then this section in the patch can be dropped.
I failed to setup the iscsi environment via ipv6 with scope link mode, like ipv6 address: [fe80::5054:ff:fe0e:d5a7%eth1].
It is no harmful to use function get_remote_host to get the real ipv6 address.
Thanks Minfei
sed 's|.*dev \(.*\).*|\1|g')
- else
netdev=$(/sbin/ip route get to ${tgt_ipaddr} | \
sed 's|.*dev \(.*\).*|\1|g')
- fi srcaddr=$(echo $netdev | awk '{ print $3; exit }') netdev=$(echo $netdev | awk '{ print $1; exit }')
- kdump_setup_netdev $netdev $srcaddr $tgt_ipaddr
kdump_setup_netdev $netdev $srcaddr $(get_remote_host $tgt_ipaddr)
# prepare netroot= command line
# FIXME: IPV6 addresses require explicit [] around $tgt_ipaddr # FIXME: Do we need to parse and set other parameters like protocol, port # iscsi_iface_name, netdev_name, LUN etc.
netroot_str="netroot=iscsi:${userpwd_str}${userpwd_in_str}@$tgt_ipaddr::::$tgt_name"
if is_ipv6_address $tgt_ipaddr; then
if `echo $tgt_ipaddr | grep -q "%"`; then
_prefix=${tgt_ipaddr%\%*}
_netdev=${tgt_ipaddr#*\%}
_netdev=$(kdump_setup_ifname $_netdev)
tgt_ipaddr=$_prefix%$_netdev
fi
netroot_str="netroot=iscsi:${userpwd_str}${userpwd_in_str}@[$tgt_ipaddr]::::$tgt_name"
else
netroot_str="netroot=iscsi:${userpwd_str}${userpwd_in_str}@$tgt_ipaddr::::$tgt_name"
fi
[[ -f $netroot_conf ]] || touch $netroot_conf
-- 1.9.3
kexec mailing list kexec@lists.fedoraproject.org https://lists.fedoraproject.org/mailman/listinfo/kexec
On 03/11/15 at 03:34pm, Minfei Huang wrote:
On 03/11/15 at 02:33pm, Dave Young wrote:
On 03/10/15 at 06:48pm, Minfei Huang wrote:
Now the dracut does not have enough info to setup the ipv6 to connect the iscsi target in the 2nd kernel, if the iscsi connecting is ipv6 protocal.
For this patch, we will parse the iscsi connecting, pass the config to the dracut to setup the ipv6 in the 2nd kernel.
Signed-off-by: Minfei Huang mhuang@redhat.com
dracut-module-setup.sh | 25 ++++++++++++++++++++----- 1 file changed, 20 insertions(+), 5 deletions(-)
diff --git a/dracut-module-setup.sh b/dracut-module-setup.sh index 4ac4c8f..8601933 100755 --- a/dracut-module-setup.sh +++ b/dracut-module-setup.sh @@ -484,6 +484,7 @@ kdump_get_iscsi_initiator() { kdump_setup_iscsi_device() { local path=$1 local tgt_name; local tgt_ipaddr;
- local _srcaddr _prefix _netdev local username; local password; local userpwd_str; local username_in; local password_in; local userpwd_in_str; local netdev
@@ -521,19 +522,33 @@ kdump_setup_iscsi_device() {
[ -n "$username_in" ] && userpwd_in_str=":$username_in:$password_in"
- netdev=$(/sbin/ip route get to ${tgt_ipaddr} | \
sed 's|.*dev \(.*\).*|\1|g')
- if is_ipv6_address $tgt_ipaddr; then
netdev=$(/sbin/ip -6 route get to $(get_remote_host $tgt_ipaddr) | \
get_remote_host is used to remove like %eth0 at the end of the string. tgt_ipaddr is returned by iscsiadm command, I guess it maybe already an ip addr without %eth0, but I'm not sure, can you verify it? If it is true then this section in the patch can be dropped.
I failed to setup the iscsi environment via ipv6 with scope link mode, like ipv6 address: [fe80::5054:ff:fe0e:d5a7%eth1].
It is also possible that later chunk of code fixed it, what is the tgt_ipaddr in your above test?
It is no harmful to use function get_remote_host to get the real ipv6 address.
Understand, but we should make changes as small as we can..
Thanks Minfei
sed 's|.*dev \(.*\).*|\1|g')
- else
netdev=$(/sbin/ip route get to ${tgt_ipaddr} | \
sed 's|.*dev \(.*\).*|\1|g')
- fi srcaddr=$(echo $netdev | awk '{ print $3; exit }') netdev=$(echo $netdev | awk '{ print $1; exit }')
- kdump_setup_netdev $netdev $srcaddr $tgt_ipaddr
kdump_setup_netdev $netdev $srcaddr $(get_remote_host $tgt_ipaddr)
# prepare netroot= command line
# FIXME: IPV6 addresses require explicit [] around $tgt_ipaddr # FIXME: Do we need to parse and set other parameters like protocol, port # iscsi_iface_name, netdev_name, LUN etc.
netroot_str="netroot=iscsi:${userpwd_str}${userpwd_in_str}@$tgt_ipaddr::::$tgt_name"
if is_ipv6_address $tgt_ipaddr; then
if `echo $tgt_ipaddr | grep -q "%"`; then
_prefix=${tgt_ipaddr%\%*}
_netdev=${tgt_ipaddr#*\%}
_netdev=$(kdump_setup_ifname $_netdev)
tgt_ipaddr=$_prefix%$_netdev
fi
netroot_str="netroot=iscsi:${userpwd_str}${userpwd_in_str}@[$tgt_ipaddr]::::$tgt_name"
else
netroot_str="netroot=iscsi:${userpwd_str}${userpwd_in_str}@$tgt_ipaddr::::$tgt_name"
fi
[[ -f $netroot_conf ]] || touch $netroot_conf
-- 1.9.3
kexec mailing list kexec@lists.fedoraproject.org https://lists.fedoraproject.org/mailman/listinfo/kexec
On 03/11/15 at 04:18pm, Dave Young wrote:
On 03/11/15 at 03:34pm, Minfei Huang wrote:
On 03/11/15 at 02:33pm, Dave Young wrote:
On 03/10/15 at 06:48pm, Minfei Huang wrote:
Now the dracut does not have enough info to setup the ipv6 to connect the iscsi target in the 2nd kernel, if the iscsi connecting is ipv6 protocal.
For this patch, we will parse the iscsi connecting, pass the config to the dracut to setup the ipv6 in the 2nd kernel.
Signed-off-by: Minfei Huang mhuang@redhat.com
dracut-module-setup.sh | 25 ++++++++++++++++++++----- 1 file changed, 20 insertions(+), 5 deletions(-)
diff --git a/dracut-module-setup.sh b/dracut-module-setup.sh index 4ac4c8f..8601933 100755 --- a/dracut-module-setup.sh +++ b/dracut-module-setup.sh @@ -484,6 +484,7 @@ kdump_get_iscsi_initiator() { kdump_setup_iscsi_device() { local path=$1 local tgt_name; local tgt_ipaddr;
- local _srcaddr _prefix _netdev local username; local password; local userpwd_str; local username_in; local password_in; local userpwd_in_str; local netdev
@@ -521,19 +522,33 @@ kdump_setup_iscsi_device() {
[ -n "$username_in" ] && userpwd_in_str=":$username_in:$password_in"
- netdev=$(/sbin/ip route get to ${tgt_ipaddr} | \
sed 's|.*dev \(.*\).*|\1|g')
- if is_ipv6_address $tgt_ipaddr; then
netdev=$(/sbin/ip -6 route get to $(get_remote_host $tgt_ipaddr) | \
get_remote_host is used to remove like %eth0 at the end of the string. tgt_ipaddr is returned by iscsiadm command, I guess it maybe already an ip addr without %eth0, but I'm not sure, can you verify it? If it is true then this section in the patch can be dropped.
I failed to setup the iscsi environment via ipv6 with scope link mode, like ipv6 address: [fe80::5054:ff:fe0e:d5a7%eth1].
It is also possible that later chunk of code fixed it, what is the tgt_ipaddr in your above test?
$tgt_ipaddr's value is 2001:151::11f, if the target is ipv6 address. So I donot confirm that the $tgt_ipaddr is fe80::5054:ff:fe0e:d5a6%eth1, if we use ipv6 address with local-link mode.
It is no harmful to use function get_remote_host to get the real ipv6 address.
Understand, but we should make changes as small as we can..
Yes.
Thanks Minfei
Thanks Minfei
sed 's|.*dev \(.*\).*|\1|g')
- else
netdev=$(/sbin/ip route get to ${tgt_ipaddr} | \
sed 's|.*dev \(.*\).*|\1|g')
- fi srcaddr=$(echo $netdev | awk '{ print $3; exit }') netdev=$(echo $netdev | awk '{ print $1; exit }')
- kdump_setup_netdev $netdev $srcaddr $tgt_ipaddr
kdump_setup_netdev $netdev $srcaddr $(get_remote_host $tgt_ipaddr)
# prepare netroot= command line
# FIXME: IPV6 addresses require explicit [] around $tgt_ipaddr # FIXME: Do we need to parse and set other parameters like protocol, port # iscsi_iface_name, netdev_name, LUN etc.
netroot_str="netroot=iscsi:${userpwd_str}${userpwd_in_str}@$tgt_ipaddr::::$tgt_name"
if is_ipv6_address $tgt_ipaddr; then
if `echo $tgt_ipaddr | grep -q "%"`; then
_prefix=${tgt_ipaddr%\%*}
_netdev=${tgt_ipaddr#*\%}
_netdev=$(kdump_setup_ifname $_netdev)
tgt_ipaddr=$_prefix%$_netdev
fi
netroot_str="netroot=iscsi:${userpwd_str}${userpwd_in_str}@[$tgt_ipaddr]::::$tgt_name"
else
netroot_str="netroot=iscsi:${userpwd_str}${userpwd_in_str}@$tgt_ipaddr::::$tgt_name"
fi
[[ -f $netroot_conf ]] || touch $netroot_conf
-- 1.9.3
kexec mailing list kexec@lists.fedoraproject.org https://lists.fedoraproject.org/mailman/listinfo/kexec