Enhance kdump to support ipv6 protocal.
Don't modify the code between v7 and v8. This version aids to cleanup and re-construct the patchset.
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 a new function to get the ip address 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: 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 | 52 +++++++++++++--- mkdumprd | 16 ++++- 4 files changed, 179 insertions(+), 55 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 --- 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 02/15/15 at 03:45pm, 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
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
ACK
- if [[ $1 =~ eth* ]]; then
- if [[ "$1" =~ eth* ]]; then _ifname="kdump-$1" else _ifname="$1"
-- 2.2.2
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 ff7a088..d09b339 100755 --- a/dracut-module-setup.sh +++ b/dracut-module-setup.sh @@ -339,6 +339,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 _netdev=${_srcaddr#*%} + _netdev=${_netdev%]*} + local _pre_netdev=$(kdump_setup_ifname $_netdev) + if [ "x"$_netdev != "x"$_pre_netdev ]; then + sed -i "s#$_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 > /tmp/$$-kdump.conf @@ -353,6 +372,7 @@ kdump_install_conf() { ;; ssh|nfs) kdump_install_net "$config_val" + kdump_ipv6_netdev_fixup "/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 02/15/15 at 03:45pm, 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 ff7a088..d09b339 100755 --- a/dracut-module-setup.sh +++ b/dracut-module-setup.sh @@ -339,6 +339,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 _netdev=${_srcaddr#*\%}
_netdev=${_netdev%]*}
local _pre_netdev=$(kdump_setup_ifname $_netdev)
_orig_netdev is better, don't stick to it much.
Otherwise this looks good.
if [ "x"$_netdev != "x"$_pre_netdev ]; then
sed -i "s#$_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 > /tmp/$$-kdump.conf @@ -353,6 +372,7 @@ kdump_install_conf() { ;; ssh|nfs) kdump_install_net "$config_val"
kdump_ipv6_netdev_fixup "/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() {
2.2.2
On 02/17/15 at 04:24pm, Baoquan He wrote:
On 02/15/15 at 03:45pm, 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 ff7a088..d09b339 100755 --- a/dracut-module-setup.sh +++ b/dracut-module-setup.sh @@ -339,6 +339,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 _netdev=${_srcaddr#*\%}
_netdev=${_netdev%]*}
local _pre_netdev=$(kdump_setup_ifname $_netdev)
_orig_netdev is better, don't stick to it much.
Otherwise this looks good.
Will rename it.
Thanks Minfei
if [ "x"$_netdev != "x"$_pre_netdev ]; then
sed -i "s#$_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 > /tmp/$$-kdump.conf @@ -353,6 +372,7 @@ kdump_install_conf() { ;; ssh|nfs) kdump_install_net "$config_val"
kdump_ipv6_netdev_fixup "/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() {
2.2.2
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 | 27 ++++++++++++++++++--------- 2 files changed, 19 insertions(+), 9 deletions(-)
diff --git a/dracut-module-setup.sh b/dracut-module-setup.sh index d09b339..0b5b66e 100755 --- a/dracut-module-setup.sh +++ b/dracut-module-setup.sh @@ -621,6 +621,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..624563f 100755 --- a/kdump-lib.sh +++ b/kdump-lib.sh @@ -170,21 +170,30 @@ get_remote_host() echo $_config_val }
+# wrap a function, so that we can use this function to get the ip address, +# if pass a parameter +get_ip_address() +{ + local _ip_address + + _ip_address=`getent ahosts $1 | head -n 1 | cut -d' ' -f1` + _ip_address=${_ip_address:-$1} + echo $_ip_address +} + # check the remote server ip address tpye is_ipv6_target() { - local _server _server_tmp + 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 1 + _target=`get_remote_host $_target` + + echo $(get_ip_address $_target) | grep -q ":" }
On 02/15/15 at 03:45pm, Minfei Huang wrote:
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.
So this patch optimize function is_ipv6_target(). Patch log is a little bit confusing, but I am fine with it.
Signed-off-by: Minfei Huang mhuang@redhat.com
dracut-module-setup.sh | 1 + kdump-lib.sh | 27 ++++++++++++++++++--------- 2 files changed, 19 insertions(+), 9 deletions(-)
diff --git a/dracut-module-setup.sh b/dracut-module-setup.sh index d09b339..0b5b66e 100755 --- a/dracut-module-setup.sh +++ b/dracut-module-setup.sh @@ -621,6 +621,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..624563f 100755 --- a/kdump-lib.sh +++ b/kdump-lib.sh @@ -170,21 +170,30 @@ get_remote_host() echo $_config_val }
+# wrap a function, so that we can use this function to get the ip address, +# if pass a parameter +get_ip_address() +{
- local _ip_address
- _ip_address=`getent ahosts $1 | head -n 1 | cut -d' ' -f1`
- _ip_address=${_ip_address:-$1}
- echo $_ip_address
+}
# check the remote server ip address tpye is_ipv6_target() {
- local _server _server_tmp
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 1
- _target=`get_remote_host $_target`
- echo $(get_ip_address $_target) | grep -q ":"
}
2.2.2
On 02/17/15 at 04:44pm, Baoquan He wrote:
On 02/15/15 at 03:45pm, Minfei Huang wrote:
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.
So this patch optimize function is_ipv6_target(). Patch log is a little bit confusing, but I am fine with it.
I want to wrap the new function to make it clear, when we call the is_ipv6_target function.
Ok, I will comment it in details.
Thanks Minfei
Signed-off-by: Minfei Huang mhuang@redhat.com
dracut-module-setup.sh | 1 + kdump-lib.sh | 27 ++++++++++++++++++--------- 2 files changed, 19 insertions(+), 9 deletions(-)
diff --git a/dracut-module-setup.sh b/dracut-module-setup.sh index d09b339..0b5b66e 100755 --- a/dracut-module-setup.sh +++ b/dracut-module-setup.sh @@ -621,6 +621,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..624563f 100755 --- a/kdump-lib.sh +++ b/kdump-lib.sh @@ -170,21 +170,30 @@ get_remote_host() echo $_config_val }
+# wrap a function, so that we can use this function to get the ip address, +# if pass a parameter +get_ip_address() +{
- local _ip_address
- _ip_address=`getent ahosts $1 | head -n 1 | cut -d' ' -f1`
- _ip_address=${_ip_address:-$1}
- echo $_ip_address
+}
# check the remote server ip address tpye is_ipv6_target() {
- local _server _server_tmp
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 1
- _target=`get_remote_host $_target`
- echo $(get_ip_address $_target) | grep -q ":"
}
2.2.2
On 02/15/15 at 03:45pm, Minfei Huang wrote:
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 | 27 ++++++++++++++++++--------- 2 files changed, 19 insertions(+), 9 deletions(-)
diff --git a/dracut-module-setup.sh b/dracut-module-setup.sh index d09b339..0b5b66e 100755 --- a/dracut-module-setup.sh +++ b/dracut-module-setup.sh @@ -621,6 +621,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..624563f 100755 --- a/kdump-lib.sh +++ b/kdump-lib.sh @@ -170,21 +170,30 @@ get_remote_host() echo $_config_val }
+# wrap a function, so that we can use this function to get the ip address, +# if pass a parameter +get_ip_address() +{
- local _ip_address
- _ip_address=`getent ahosts $1 | head -n 1 | cut -d' ' -f1`
- _ip_address=${_ip_address:-$1}
- echo $_ip_address
+}
# check the remote server ip address tpye is_ipv6_target()
Could it be get_network_target, then call is_ipv6_address which is implemented later? It's a little uncomfortable with ipv6_target and ipv6_address. Kind of duplicate implementation.
{
- local _server _server_tmp
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 1
- _target=`get_remote_host $_target`
- echo $(get_ip_address $_target) | grep -q ":"
}
2.2.2
On 02/17/15 at 05:16pm, Baoquan He wrote:
On 02/15/15 at 03:45pm, Minfei Huang wrote:
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 | 27 ++++++++++++++++++--------- 2 files changed, 19 insertions(+), 9 deletions(-)
diff --git a/dracut-module-setup.sh b/dracut-module-setup.sh index d09b339..0b5b66e 100755 --- a/dracut-module-setup.sh +++ b/dracut-module-setup.sh @@ -621,6 +621,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..624563f 100755 --- a/kdump-lib.sh +++ b/kdump-lib.sh @@ -170,21 +170,30 @@ get_remote_host() echo $_config_val }
+# wrap a function, so that we can use this function to get the ip address, +# if pass a parameter +get_ip_address() +{
- local _ip_address
- _ip_address=`getent ahosts $1 | head -n 1 | cut -d' ' -f1`
- _ip_address=${_ip_address:-$1}
- echo $_ip_address
+}
# check the remote server ip address tpye is_ipv6_target()
Could it be get_network_target, then call is_ipv6_address which is implemented later? It's a little uncomfortable with ipv6_target and ipv6_address. Kind of duplicate implementation.
Hi, Bao!
This function will parse the passed parameter, then return the true, if the parameter is ipv6, otherwise is false. So I think the function is better to start with "is_".
Thanks Minfei
{
- local _server _server_tmp
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 1
- _target=`get_remote_host $_target`
- echo $(get_ip_address $_target) | grep -q ":"
}
2.2.2
On 02/17/15 at 08:51pm, Minfei Huang wrote:
On 02/17/15 at 05:16pm, Baoquan He wrote:
On 02/15/15 at 03:45pm, Minfei Huang wrote:
# check the remote server ip address tpye is_ipv6_target()
Could it be get_network_target, then call is_ipv6_address which is implemented later? It's a little uncomfortable with ipv6_target and ipv6_address. Kind of duplicate implementation.
Hi, Bao!
This function will parse the passed parameter, then return the true, if the parameter is ipv6, otherwise is false. So I think the function is better to start with "is_".
I mean code can be like below, and get_network_target can be reused later.
{ local _target $_target=$(get_network_target) is_ipv6_address($_target) }
Thanks Minfei
{
- local _server _server_tmp
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 1
- _target=`get_remote_host $_target`
- echo $(get_ip_address $_target) | grep -q ":"
}
2.2.2
On 02/17/15 at 09:43pm, Baoquan He wrote:
On 02/17/15 at 08:51pm, Minfei Huang wrote:
On 02/17/15 at 05:16pm, Baoquan He wrote:
On 02/15/15 at 03:45pm, Minfei Huang wrote:
# check the remote server ip address tpye is_ipv6_target()
Could it be get_network_target, then call is_ipv6_address which is implemented later? It's a little uncomfortable with ipv6_target and ipv6_address. Kind of duplicate implementation.
Hi, Bao!
This function will parse the passed parameter, then return the true, if the parameter is ipv6, otherwise is false. So I think the function is better to start with "is_".
I mean code can be like below, and get_network_target can be reused later.
{ local _target $_target=$(get_network_target) is_ipv6_address($_target) }
Hi, Bao!
I think I am fine to wrap the new function get_network_target to get the target from the config /etc/kdump.conf.
Thanks Minfei
Thanks Minfei
{
- local _server _server_tmp
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 1
- _target=`get_remote_host $_target`
- echo $(get_ip_address $_target) | grep -q ":"
}
2.2.2
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].
Signed-off-by: Minfei Huang mhuang@redhat.com --- kdump-lib.sh | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+)
diff --git a/kdump-lib.sh b/kdump-lib.sh index 624563f..5f4caa3 100755 --- a/kdump-lib.sh +++ b/kdump-lib.sh @@ -181,6 +181,15 @@ get_ip_address() 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 ":" +} + # check the remote server ip address tpye is_ipv6_target() { @@ -197,3 +206,17 @@ is_ipv6_target()
echo $(get_ip_address $_target) | grep -q ":" } + +# 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 +}
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 --- 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 0b5b66e..107a2d6 100755 --- a/dracut-module-setup.sh +++ b/dracut-module-setup.sh @@ -622,6 +622,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 02/15/15 at 03:45pm, 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
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 0b5b66e..107a2d6 100755 --- a/dracut-module-setup.sh +++ b/dracut-module-setup.sh @@ -622,6 +622,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"
-- 2.2.2
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 --- 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 107a2d6..73e5087 100755 --- a/dracut-module-setup.sh +++ b/dracut-module-setup.sh @@ -191,27 +191,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 02/15/15 at 03:45pm, 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
Looks good.
Ack it.
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 107a2d6..73e5087 100755 --- a/dracut-module-setup.sh +++ b/dracut-module-setup.sh @@ -191,27 +191,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
2.2.2
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 | 65 ++++++++++++++++++++++++++++++++++---------------- 1 file changed, 44 insertions(+), 21 deletions(-)
diff --git a/dracut-module-setup.sh b/dracut-module-setup.sh index 73e5087..1a1f03e 100755 --- a/dracut-module-setup.sh +++ b/dracut-module-setup.sh @@ -70,14 +70,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 }
@@ -286,24 +297,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` + _server=`get_remote_host $config_val`
- _netdev=`/sbin/ip route get to $_server 2>&1` - [ $? != 0 ] && echo "Bad kdump location: $config_val" && exit 1 + is_hostname $_server && _server=`getent ahosts $_server|cut -d' ' -f1`
- #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` + 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 02/15/15 at 03:45pm, 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"
Signed-off-by: Minfei Huang mhuang@redhat.com
dracut-module-setup.sh | 65 ++++++++++++++++++++++++++++++++++---------------- 1 file changed, 44 insertions(+), 21 deletions(-)
diff --git a/dracut-module-setup.sh b/dracut-module-setup.sh index 73e5087..1a1f03e 100755 --- a/dracut-module-setup.sh +++ b/dracut-module-setup.sh @@ -70,14 +70,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#*\/}
Hi Minfei,
Did you also check the "ipcalc " whether it will has similar effect with ipv4?
_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
}
It could be taken out to compose another patch as I said previously.
@@ -286,24 +297,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`
- _server=`get_remote_host $config_val`
- _netdev=`/sbin/ip route get to $_server 2>&1`
- [ $? != 0 ] && echo "Bad kdump location: $config_val" && exit 1
- is_hostname $_server && _server=`getent ahosts $_server|cut -d' ' -f1`
- #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`
- 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`
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`
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}"
-- 2.2.2
On 02/17/15 at 06:05pm, Baoquan He wrote:
On 02/15/15 at 03:45pm, 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"
Signed-off-by: Minfei Huang mhuang@redhat.com
dracut-module-setup.sh | 65 ++++++++++++++++++++++++++++++++++---------------- 1 file changed, 44 insertions(+), 21 deletions(-)
diff --git a/dracut-module-setup.sh b/dracut-module-setup.sh index 73e5087..1a1f03e 100755 --- a/dracut-module-setup.sh +++ b/dracut-module-setup.sh @@ -70,14 +70,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#*\/}
Hi Minfei,
Did you also check the "ipcalc " whether it will has similar effect with ipv4?
Hi, Bao!
Thank you for your review.
The ipv6 does not have the mask, only the prefix, default is 64.
_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
}
It could be taken out to compose another patch as I said previously.
Ok, I will bisect it.
Thanks Minfei
@@ -286,24 +297,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`
- _server=`get_remote_host $config_val`
- _netdev=`/sbin/ip route get to $_server 2>&1`
- [ $? != 0 ] && echo "Bad kdump location: $config_val" && exit 1
- is_hostname $_server && _server=`getent ahosts $_server|cut -d' ' -f1`
- #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`
- 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`
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`
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}"
-- 2.2.2
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 1a1f03e..6ed1034 100755 --- a/dracut-module-setup.sh +++ b/dracut-module-setup.sh @@ -480,6 +480,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 @@ -517,19 +518,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 02/15/15 at 03:45pm, 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(-)
What's your suggestion or plan on testing of ipv6 iscsi? Just think that once ipv6 is merged and declare to support, customers will report bugs on kinds of features with ipv6.
diff --git a/dracut-module-setup.sh b/dracut-module-setup.sh index 1a1f03e..6ed1034 100755 --- a/dracut-module-setup.sh +++ b/dracut-module-setup.sh @@ -480,6 +480,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
@@ -517,19 +518,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
-- 2.2.2
On 02/17/15 at 06:23pm, Baoquan He wrote:
On 02/15/15 at 03:45pm, 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(-)
What's your suggestion or plan on testing of ipv6 iscsi? Just think that once ipv6 is merged and declare to support, customers will report bugs on kinds of features with ipv6.
Hi, Bao!
The way which supports the iscsi with ipv6 is same as ipv4. So I think the general testcase is fine. Meanwhile we can fix the bug in the future, if we meet.
Thanks Minfei
diff --git a/dracut-module-setup.sh b/dracut-module-setup.sh index 1a1f03e..6ed1034 100755 --- a/dracut-module-setup.sh +++ b/dracut-module-setup.sh @@ -480,6 +480,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
@@ -517,19 +518,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
-- 2.2.2
On 02/17/15 at 09:03pm, Minfei Huang wrote:
On 02/17/15 at 06:23pm, Baoquan He wrote:
On 02/15/15 at 03:45pm, 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(-)
What's your suggestion or plan on testing of ipv6 iscsi? Just think that once ipv6 is merged and declare to support, customers will report bugs on kinds of features with ipv6.
Hi, Bao!
The way which supports the iscsi with ipv6 is same as ipv4. So I think the general testcase is fine. Meanwhile we can fix the bug in the future, if we meet.
I am fine with it. Actually the test could be very complicated. E.g the bridge, vlan tag, bond. And they can configure over each other. It's OK to do it later when customer really deploy it and report bugs. Otherwise too much effort is needed.
On 02/17/15 at 10:13pm, Baoquan He wrote:
On 02/17/15 at 09:03pm, Minfei Huang wrote:
On 02/17/15 at 06:23pm, Baoquan He wrote:
On 02/15/15 at 03:45pm, 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(-)
What's your suggestion or plan on testing of ipv6 iscsi? Just think that once ipv6 is merged and declare to support, customers will report bugs on kinds of features with ipv6.
Hi, Bao!
The way which supports the iscsi with ipv6 is same as ipv4. So I think the general testcase is fine. Meanwhile we can fix the bug in the future, if we meet.
I am fine with it. Actually the test could be very complicated. E.g the bridge, vlan tag, bond. And they can configure over each other. It's OK to do it later when customer really deploy it and report bugs. Otherwise too much effort is needed.
Agreed.
Thanks Minfei