rd.route should use the name from kdump_setup_ifname

Resolves: bz1950932
Upstream: Fedora
Conflict: None

commit 8a33ffffbc
Author: Coiby Xu <coxu@redhat.com>
Date:   Thu May 6 09:20:27 2021 +0800

    rd.route should use the name from kdump_setup_ifname

    This fixes bz1854037 which happens because kexec-tools generates rd.route for
    eth0 instead of for kdump-eth0,
     1. "rd.route=168.63.129.16:10.0.0.1:eth0 rd.route=169.254.169.254:10.0.0.1:eth0" is passed to the dracut cmdline by kexec-tools
     2. In the 2rd kernel, dracut/modules.d/35network-manager/nm-config.sh calls
        /usr/libexec/nm-initrd-generator to generate two .nmconnection files
        based on the dracut cmdline, i.e. kdump-eth0.nmconnection and eth0.nmconnection,
        - /run/NetworkManager/system-connections/kdump-eth0.nmconnection
            [connection]
            id=kdump-eth0
            uuid=3ef53b1b-3908-437e-a15f-cf1f3ea2678b
            type=ethernet
            autoconnect-retries=1
            interface-name=kdump-eth0
            multi-connect=1
            permissions=
            wait-device-timeout=60000
            [ethernet]
            mac-address-blacklist=
            [ipv4]
            address1=10.0.0.4/24,10.0.0.1
            dhcp-timeout=90
            dns=168.63.129.16;
            dns-search=
            may-fail=false
            method=manual
            [ipv6]
            addr-gen-mode=eui64
            dhcp-timeout=90
            dns-search=
            method=disabled
            [proxy]

        - /run/NetworkManager/system-connections/eth0.nmconnection
            [connection]
            id=eth0
            uuid=f224dc22-2891-4d7b-8f66-745029df4b53
            type=ethernet
            autoconnect-retries=1
            interface-name=eth0
            multi-connect=1
            permissions=
            [ethernet]
            mac-address-blacklist=
            [ipv4]
            dhcp-timeout=90
            dns=168.63.129.16;
            dns-search=
            method=auto
            route1=168.63.129.16/32,10.0.0.1
            route2=169.254.169.254/32,10.0.0.1
            [ipv6]
            addr-gen-mode=eui64
            dhcp-timeout=90
            dns-search=
            method=auto
            [proxy]

     3. Since there's eth0.nmconnection, NetworkManager will try to get an IP for eth0 regardless of the fact it's a slave NIC and time out
        ```
        $ ip link show
        2: kdump-eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP mode DEFAULT group default qlen 1000
           link/ether 00:0d:3a:11:86:8b brd ff:ff:ff:ff:ff:ff
        3: eth0: <BROADCAST,MULTICAST,SLAVE,UP,LOWER_UP> mtu 1500 qdisc mq master kdump-eth0 state UP mode DEFAULT group default qlen 1000
        ```

    Reported-by: Huijing Hei <hhei@redhat.com>
    Signed-off-by: Coiby Xu <coxu@redhat.com>
    Acked-by: Kairui Song <kasong@redhat.com>

Signed-off-by: Coiby Xu <coxu@redhat.com>
This commit is contained in:
Coiby Xu 2021-05-13 15:37:03 +08:00 committed by Coiby Xu
parent 6a8e087180
commit 69c605f392

View File

@ -235,7 +235,7 @@ cal_netmask_by_prefix() {
#$2: srcaddr #$2: srcaddr
#if it use static ip echo it, or echo null #if it use static ip echo it, or echo null
kdump_static_ip() { kdump_static_ip() {
local _netdev="$1" _srcaddr="$2" _ipv6_flag local _netdev="$1" _srcaddr="$2" kdumpnic="$3" _ipv6_flag
local _netmask _gateway _ipaddr _target _nexthop _prefix local _netmask _gateway _ipaddr _target _nexthop _prefix
_ipaddr=$(ip addr show dev $_netdev permanent | awk "/ $_srcaddr\/.* /{print \$2}") _ipaddr=$(ip addr show dev $_netdev permanent | awk "/ $_srcaddr\/.* /{print \$2}")
@ -273,14 +273,14 @@ kdump_static_ip() {
_target="[$_target]" _target="[$_target]"
_nexthop="[$_nexthop]" _nexthop="[$_nexthop]"
fi fi
echo "rd.route=$_target:$_nexthop:$_netdev" echo "rd.route=$_target:$_nexthop:$kdumpnic"
done >> ${initdir}/etc/cmdline.d/45route-static.conf done >> ${initdir}/etc/cmdline.d/45route-static.conf
kdump_handle_mulitpath_route $_netdev $_srcaddr kdump_handle_mulitpath_route $_netdev $_srcaddr $kdumpnic
} }
kdump_handle_mulitpath_route() { kdump_handle_mulitpath_route() {
local _netdev="$1" _srcaddr="$2" _ipv6_flag local _netdev="$1" _srcaddr="$2" kdumpnic="$3" _ipv6_flag
local _target _nexthop _route _weight _max_weight _rule local _target _nexthop _route _weight _max_weight _rule
if is_ipv6_address $_srcaddr; then if is_ipv6_address $_srcaddr; then
@ -299,9 +299,9 @@ kdump_handle_mulitpath_route() {
_nexthop=`echo "$_route" | cut -d ' ' -f3` _nexthop=`echo "$_route" | cut -d ' ' -f3`
_max_weight=$_weight _max_weight=$_weight
if [ "x" != "x"$_ipv6_flag ]; then if [ "x" != "x"$_ipv6_flag ]; then
_rule="rd.route=[$_target]:[$_nexthop]:$_netdev" _rule="rd.route=[$_target]:[$_nexthop]:$kdumpnic"
else else
_rule="rd.route=$_target:$_nexthop:$_netdev" _rule="rd.route=$_target:$_nexthop:$kdumpnic"
fi fi
fi fi
else else
@ -491,7 +491,7 @@ kdump_install_net() {
kdump_setup_znet $_netdev kdump_setup_znet $_netdev
fi fi
_static=$(kdump_static_ip $_netdev $_srcaddr) _static=$(kdump_static_ip $_netdev $_srcaddr $kdumpnic)
if [ -n "$_static" ]; then if [ -n "$_static" ]; then
_proto=none _proto=none
elif is_ipv6_address $_srcaddr; then elif is_ipv6_address $_srcaddr; then