Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
openSUSE:Leap:42.2:Ports
kdump
kdump-add-IPv6-KDUMP_NETCONFIG-modes.patch
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File kdump-add-IPv6-KDUMP_NETCONFIG-modes.patch of Package kdump
From: Petr Tesarik <ptesarik@suse.cz> Date: Tue Sep 23 16:12:34 2014 +0200 Subject: Add KDUMP_NETCONFIG modes to support IPv6 References: bnc#885897 Patch-mainline: v0.8.16 Git-commit: ffd6542ed47a41be1f1d9f8df95781b6d94123d4 KDUMP_NETCONFIG had only two modes: static and dhcp, where dhcp actually only means DHCP4. New modes are needed to get an IPv6 address on the interface. Note that automatic configuration (KDUMP_NETCONFIG=auto) still uses only IPv4, because dracut does not implement multiple alternative ip configurations, and there's no way to determine in advance which stack should be used. Signed-off-by: Petr Tesarik <ptesarik@suse.cz> --- doc/man/kdump.5.txt.in | 35 ++++++++++++++++++++++++++++++----- init/module-setup.sh | 42 ++++++++++++++++++++++++++++++++++-------- init/setup-kdump.functions | 39 ++++++++++++++++++++++++++++++++++++++- sysconfig.kdump.in | 4 ++-- 4 files changed, 104 insertions(+), 16 deletions(-) --- a/doc/man/kdump.5.txt.in +++ b/doc/man/kdump.5.txt.in @@ -513,13 +513,38 @@ KDUMP_NETCONFIG Network configuration for kdump. Because the dump process runs in initrd, the network configuration is different from the normal network configuration. Use -_auto_ to auto-detect the network configuration, this is also the default. +_auto_ to auto-detect the network configuration (see *auto* mode below). The +interface with the default route will be used. This is the default. + +Auto-detection cannot be used to set up dual-stack (IPv4 and IPv6) hosts +because of limitations in the implementation of the _ip=_ initrd command line +option. Use a _netdevice:mode_ string to force a specific network device to be used. A -_netdevice_ is for example "eth0". The _mode_ can be either "dhcp" or "static". -If you use "static", you have to set the IP address with _ip=ipspec_. _ipspec_ -is <client>:<server>:<gateway>:<netmask>:<hostname>:<device>:<proto>. See -*mkinitrd*(8) for details. +_netdevice_ is for example "eth0". The _mode_ can be: + +*static*:: + Always re-use the current configuration of _netdevice_ (both IPv4 and IPv6). + Note that only permanent global IPv6 addresses are stored, because temporary + addresses are likely to expire before the system crashes, and link-local + addresses are set up automatically. + +*auto6*:: + Use IPv6 autoconfiguration to get an address on the interface. + +*dhcp*:: +*dhcp4*:: + Use DHCP to configure an IPv4 address on the interface. + +*dhcp6*:: + Use DHCP6 to configure an IPv6 address on the interface. + +*auto*:: + Select the mode depending on the current state of the interface: + + * use DHCP4 if it has an IPv4 address (IPv6 not set up), + * use DHCP6 if it has a permanent IPv6 address (IPv4 not set up), + * use IPv6 auto-configuration if it has neither (IPv4 not set up). You can set KDUMP_NETCONFIG to "" if you want no network in initrd, i.e. you use disk dumping. --- a/init/module-setup.sh +++ b/init/module-setup.sh @@ -65,24 +65,50 @@ kdump_cmdline_ip() { [ "$kdump_neednet" = y ] || return 0 echo -n "rd.neednet=1" + + local _if _mode if [ "$KDUMP_NETCONFIG" = "auto" ] ; then - echo -n " ip=any" + _if=default + _mode=auto else set -- ${KDUMP_NETCONFIG//:/ } local _if=$1 local _mode=$2 + fi - if [ "$_if" = "default" ] ; then - _if=$(kdump_default_netdev) - fi - printf " %s" $(kdump_ifname_config "$_if") + [ "$_if" = "default" ] && _if=$(kdump_default_netdev) - if [ "$_mode" = "static" ] ; then - printf " %s" $(kdump_ip_config "$_if") + printf " %s" $(kdump_ifname_config "$_if") + + if [ "$_mode" = "auto" ] ; then + if [ -n $(kdump_ip_config "$_if") ] ; then + _mode=dhcp4 + elif [ -n $(kdump_ip6_config "$_if") ] ; then + _mode=dhcp6 else - echo -n " ip=${_if}:dhcp" + _mode=auto6 fi fi + + case "$_mode" in + static) + printf " %s" \ + $(kdump_ip_config "$_if") \ + $(kdump_ip6_config "$_if") + ;; + dhcp|dhcp4) + echo " ip=${_if}:dhcp" + ;; + dhcp6) + echo " ip=${_if}:dhcp6" + ;; + auto6) + echo " ip=${_if}:auto6" + ;; + *) + derror "Wrong KDUMP_NETCONFIG mode: $_mode" + ;; + esac } cmdline() { --- a/init/setup-kdump.functions +++ b/init/setup-kdump.functions @@ -230,7 +230,7 @@ kdump_prefix2netmask() { # {{{ } # }}} # -# Get the ip= parameter for a given device +# Get the IPv4 ip= parameter for a given device # # Parameters: # 1) device device name @@ -267,6 +267,43 @@ function kdump_ip_config() # {{{ } # }}} # +# Get the IPv6 ip= parameter for a given device +# +# Parameters: +# 1) device device name +# Output: +# ip configuration string that can be used for the ip= initrd parameter +function kdump_ip6_config() # {{{ +{ + local iface="$1" + local ipaddr peeraddr gwaddr hostname + local family cidr rest prefix + + hostname=$(hostname) + gwaddr=$(ip -6 route show ::/0 | sed -n 's/.* via \([^ ]*\).*/[\1]/p') + + while read family cidr rest + do + [ "$family" = "inet6" ] || continue + + ipaddr="${cidr%/*}" + prefix="${cidr:${#ipaddr}}" + ipaddr="[$ipaddr]$prefix" + set -- $rest + + if [ "$1" == "peer" ] ; then + peeraddr="${2%/*}" + prefix="${2:${#peeraddr}}" + peeraddr="[$peeraddr]" + else + peeraddr= + fi + + echo "ip=$ipaddr:$peeraddr:$gwaddr::$hostname:$iface:none" + done < <(ip -6 address show dev "$iface" permanent scope global) +} # }}} + +# # Get the save directory and protocol. # # Output variables: --- a/sysconfig.kdump.in +++ b/sysconfig.kdump.in @@ -279,8 +279,8 @@ KDUMPTOOL_FLAGS="" ## ServiceRestart: kdump # # Network configuration. Use "auto" for auto-detection in initrd, or a string -# that contains the network device and the mode (dhcp,static), separated by -# a colon. Example: "eth0:static" or "eth1:dhcp". +# that contains the network device and the mode (static, dhcp, dhcp6, auto6), +# separated by a colon. Example: "eth0:static" or "eth1:dhcp". # # For static configuration, you have to add the configuration to # KDUMP_COMMANDLINE_APPEND.
Locations
Projects
Search
Status Monitor
Help
OpenBuildService.org
Documentation
API Documentation
Code of Conduct
Contact
Support
@OBShq
Terms
openSUSE Build Service is sponsored by
The Open Build Service is an
openSUSE project
.
Sign Up
Log In
Places
Places
All Projects
Status Monitor