NetworkManager/src/core
Thomas Haller 557644f5e0
core: don't add dependent local route for addresses
When adding an IPv4 address, kernel automatically adds a local route.
This is done by fib_add_ifaddr(). Note that if the address is
IFA_F_SECONDARY, then the "src" is the primary address. That means, with

  nmcli connection add con-name t type ethernet ifname t autoconnect no \
     ipv4.method manual ipv6.method disabled \
     ipv4.addresses '192.168.77.10/24, 192.168.77.11/24'

we get two routes:

  "local 192.168.77.10 dev t table local proto kernel scope host src 192.168.77.10"
  "local 192.168.77.11 dev t table local proto kernel scope host src 192.168.77.10"

Our code would only generate instead:

  "local 192.168.77.10 dev t table local proto kernel scope host src 192.168.77.10"
  "local 192.168.77.11 dev t table local proto kernel scope host src 192.168.77.11"

Afterwards, this artificial route will be leaked:

    #!/bin/bash

    set -vx

    nmcli connection delete t || :
    ip link delete t || :

    ip link add name t type veth peer t-veth

    nmcli connection add con-name t type ethernet ifname t autoconnect no ipv4.method manual ipv4.addresses '192.168.77.10/24, 192.168.77.11/24' ipv6.method disabled

    nmcli connection up t

    ip route show table all dev t | grep --color '^\|192.168.77.11'

    sleep 1

    nmcli device modify t -ipv4.addresses 192.168.77.11/24

    ip route show table all dev t | grep --color '^\|192.168.77.11'

    ip route show table all dev t | grep -q 192.168.77.11 && echo "the local route 192.168.77.11 is still there, because NM adds a local route with wrong pref-src"

It will also be leaked because in the example above ipv4.route-table is
unset, so we are not in full route sync mode and the local table is not
synced.

This was introduced by commit 3e5fc04df3 ('core: add dependent local
routes configured by kernel'), but it's unclear to me why we really need
this. Drop it again and effectively revert commit 3e5fc04df3 ('core:
add dependent local routes configured by kernel').

I think this "solution" is still bad. We need to improve our route sync
approach with L3Cfg rework. For now, it's probably good enough.

https://bugzilla.redhat.com/show_bug.cgi?id=1907661
2021-03-23 22:30:32 +01:00
..
devices core: log route-table-sync-mode in nm_device_set_ip_config() 2021-03-23 17:56:46 +01:00
dhcp platform: move more platform code to src/libnm-platform/ 2021-03-05 11:27:16 +01:00
dns platform: move more platform code to src/libnm-platform/ 2021-03-05 11:27:16 +01:00
dnsmasq platform: move more platform code to src/libnm-platform/ 2021-03-05 11:27:16 +01:00
ndisc platform: move more platform code to src/libnm-platform/ 2021-03-05 11:27:16 +01:00
platform platform: move more platform code to src/libnm-platform/ 2021-03-05 11:27:16 +01:00
ppp platform: move more platform code to src/libnm-platform/ 2021-03-05 11:27:16 +01:00
settings all: use NM_IW_ESSID_MAX_SIZE define instead of literally 32 2021-03-18 11:38:21 +01:00
supplicant platform: move more platform code to src/libnm-platform/ 2021-03-05 11:27:16 +01:00
systemd build/meson: cleanup dependencies for libnm-core-impl 2021-02-28 10:42:05 +01:00
tests platform: move more platform code to src/libnm-platform/ 2021-03-05 11:27:16 +01:00
vpn platform: move more platform code to src/libnm-platform/ 2021-03-05 11:27:16 +01:00
main-utils.c all: add "src/core/nm-default-daemon.h" as replacement for "nm-default.h" 2021-02-09 12:38:18 +01:00
main-utils.h all: move "src/" directory to "src/core/" 2021-02-04 09:45:55 +01:00
main.c platform: move more platform code to src/libnm-platform/ 2021-03-05 11:27:16 +01:00
meson.build initrd: move "src/core/initrd/" to "src/nm-initrd-generator/" 2021-03-15 17:10:53 +01:00
NetworkManagerUtils.c libnm,core: support "uidrange" parameter for routing rules 2021-03-23 14:19:38 +01:00
NetworkManagerUtils.h platform: move more platform code to src/libnm-platform/ 2021-03-05 11:27:16 +01:00
nm-act-request.c build: move "libnm-core/" to "src/" and split it 2021-02-18 19:46:51 +01:00
nm-act-request.h all: move "src/" directory to "src/core/" 2021-02-04 09:45:55 +01:00
nm-active-connection.c build: move "libnm-core/" to "src/" and split it 2021-02-18 19:46:51 +01:00
nm-active-connection.h all: move "src/" directory to "src/core/" 2021-02-04 09:45:55 +01:00
nm-audit-manager.c build: move "libnm-core/" to "src/" and split it 2021-02-18 19:46:51 +01:00
nm-audit-manager.h all: move "src/" directory to "src/core/" 2021-02-04 09:45:55 +01:00
nm-auth-manager.c build: move "shared/nm-{glib-aux,log-null,log-core}" to "src/libnm-{glib-aux,log-null,log-core}" 2021-02-24 12:48:20 +01:00
nm-auth-manager.h build: move "libnm-core/" to "src/" and split it 2021-02-18 19:46:51 +01:00
nm-auth-utils.c build: move "shared/nm-{glib-aux,log-null,log-core}" to "src/libnm-{glib-aux,log-null,log-core}" 2021-02-24 12:48:20 +01:00
nm-auth-utils.h all: move "src/" directory to "src/core/" 2021-02-04 09:45:55 +01:00
nm-checkpoint-manager.c all: add "src/core/nm-default-daemon.h" as replacement for "nm-default.h" 2021-02-09 12:38:18 +01:00
nm-checkpoint-manager.h all: move "src/" directory to "src/core/" 2021-02-04 09:45:55 +01:00
nm-checkpoint.c build: move "libnm-core/" to "src/" and split it 2021-02-18 19:46:51 +01:00
nm-checkpoint.h all: move "src/" directory to "src/core/" 2021-02-04 09:45:55 +01:00
nm-config-data.c config: use nm_streq() instead of strcmp() 2021-03-23 14:26:56 +01:00
nm-config-data.h iwd: Mirror NM connections to IWD network config files 2021-03-23 14:24:42 +01:00
nm-config.c iwd: Mirror NM connections to IWD network config files 2021-03-23 14:24:42 +01:00
nm-config.h config: add "nm-base/nm-config-base.h" 2021-03-15 17:10:52 +01:00
nm-connectivity.c build: move "libnm-core/" to "src/" and split it 2021-02-18 19:46:51 +01:00
nm-connectivity.h core: move NMPObjectType to "libnm-platform/nmp-base.h" 2021-03-05 11:27:15 +01:00
nm-core-utils.c platform: move nm_utils_modprobe() to libnm-platform 2021-03-05 11:27:15 +01:00
nm-core-utils.h platform: move nm_utils_modprobe() to libnm-platform 2021-03-05 11:27:15 +01:00
nm-dbus-manager.c build: move "shared/nm-std-aux" to "src/libnm-std-aux" 2021-02-24 12:48:24 +01:00
nm-dbus-manager.h all: move "src/" directory to "src/core/" 2021-02-04 09:45:55 +01:00
nm-dbus-object.c all: add "src/core/nm-default-daemon.h" as replacement for "nm-default.h" 2021-02-09 12:38:18 +01:00
nm-dbus-object.h all: move "src/" directory to "src/core/" 2021-02-04 09:45:55 +01:00
nm-dbus-utils.c all: add "src/core/nm-default-daemon.h" as replacement for "nm-default.h" 2021-02-09 12:38:18 +01:00
nm-dbus-utils.h all: move "src/" directory to "src/core/" 2021-02-04 09:45:55 +01:00
nm-dcb.c platform: move more platform code to src/libnm-platform/ 2021-03-05 11:27:16 +01:00
nm-dcb.h all: move "src/" directory to "src/core/" 2021-02-04 09:45:55 +01:00
nm-default-daemon.h build: move "shared/nm-{glib-aux,log-null,log-core}" to "src/libnm-{glib-aux,log-null,log-core}" 2021-02-24 12:48:20 +01:00
nm-dhcp-config.c all: add "src/core/nm-default-daemon.h" as replacement for "nm-default.h" 2021-02-09 12:38:18 +01:00
nm-dhcp-config.h all: move "src/" directory to "src/core/" 2021-02-04 09:45:55 +01:00
nm-dispatcher.c platform: move more platform code to src/libnm-platform/ 2021-03-05 11:27:16 +01:00
nm-dispatcher.h all: move "src/" directory to "src/core/" 2021-02-04 09:45:55 +01:00
nm-firewall-manager.c build: move "shared/nm-{glib-aux,log-null,log-core}" to "src/libnm-{glib-aux,log-null,log-core}" 2021-02-24 12:48:20 +01:00
nm-firewall-manager.h all: move "src/" directory to "src/core/" 2021-02-04 09:45:55 +01:00
nm-hostname-manager.c build: move "libnm-core/" to "src/" and split it 2021-02-18 19:46:51 +01:00
nm-hostname-manager.h all: move "src/" directory to "src/core/" 2021-02-04 09:45:55 +01:00
nm-iface-helper.c platform: move more platform code to src/libnm-platform/ 2021-03-05 11:27:16 +01:00
nm-ip-config.c all: add "src/core/nm-default-daemon.h" as replacement for "nm-default.h" 2021-02-09 12:38:18 +01:00
nm-ip-config.h all: move "src/" directory to "src/core/" 2021-02-04 09:45:55 +01:00
nm-ip4-config.c core: don't add dependent local route for addresses 2021-03-23 22:30:32 +01:00
nm-ip4-config.h platform: move more platform code to src/libnm-platform/ 2021-03-05 11:27:16 +01:00
nm-ip6-config.c core: don't add dependent local route for addresses 2021-03-23 22:30:32 +01:00
nm-ip6-config.h platform: move more platform code to src/libnm-platform/ 2021-03-05 11:27:16 +01:00
nm-keep-alive.c build: move "shared/nm-{glib-aux,log-null,log-core}" to "src/libnm-{glib-aux,log-null,log-core}" 2021-02-24 12:48:20 +01:00
nm-keep-alive.h all: move "src/" directory to "src/core/" 2021-02-04 09:45:55 +01:00
nm-l3-config-data.c platform: move more platform code to src/libnm-platform/ 2021-03-05 11:27:16 +01:00
nm-l3-config-data.h platform: move more platform code to src/libnm-platform/ 2021-03-05 11:27:16 +01:00
nm-l3-ipv4ll.c all: add "src/core/nm-default-daemon.h" as replacement for "nm-default.h" 2021-02-09 12:38:18 +01:00
nm-l3-ipv4ll.h all: move "src/" directory to "src/core/" 2021-02-04 09:45:55 +01:00
nm-l3cfg.c platform: move more platform code to src/libnm-platform/ 2021-03-05 11:27:16 +01:00
nm-l3cfg.h platform: move more platform code to src/libnm-platform/ 2021-03-05 11:27:16 +01:00
nm-manager.c platform: move more platform code to src/libnm-platform/ 2021-03-05 11:27:16 +01:00
nm-manager.h all: move "src/" directory to "src/core/" 2021-02-04 09:45:55 +01:00
nm-netns.c platform: move more platform code to src/libnm-platform/ 2021-03-05 11:27:16 +01:00
nm-netns.h platform: move more platform code to src/libnm-platform/ 2021-03-05 11:27:16 +01:00
nm-pacrunner-manager.c platform: move more platform code to src/libnm-platform/ 2021-03-05 11:27:16 +01:00
nm-pacrunner-manager.h all: move "src/" directory to "src/core/" 2021-02-04 09:45:55 +01:00
nm-policy.c platform: move more platform code to src/libnm-platform/ 2021-03-05 11:27:16 +01:00
nm-policy.h all: move "src/" directory to "src/core/" 2021-02-04 09:45:55 +01:00
nm-proxy-config.c build: move "libnm-core/" to "src/" and split it 2021-02-18 19:46:51 +01:00
nm-proxy-config.h all: move "src/" directory to "src/core/" 2021-02-04 09:45:55 +01:00
nm-rfkill-manager.c build: move "shared/nm-{base,udev-aux}" to "src/libnm-{base,udev-aux}" 2021-02-24 12:48:19 +01:00
nm-rfkill-manager.h all: move "src/" directory to "src/core/" 2021-02-04 09:45:55 +01:00
nm-session-monitor.c all: add "src/core/nm-default-daemon.h" as replacement for "nm-default.h" 2021-02-09 12:38:18 +01:00
nm-session-monitor.h all: move "src/" directory to "src/core/" 2021-02-04 09:45:55 +01:00
nm-sleep-monitor.c build: move "libnm-core/" to "src/" and split it 2021-02-18 19:46:51 +01:00
nm-sleep-monitor.h all: move "src/" directory to "src/core/" 2021-02-04 09:45:55 +01:00
nm-test-utils-core.h tests: move nmtst_init_with_logging() to "libnm-glib-aux/nm-test-utils.h" 2021-03-15 17:10:52 +01:00
nm-types.h core: move NMPObjectType to "libnm-platform/nmp-base.h" 2021-03-05 11:27:15 +01:00
org.freedesktop.NetworkManager.conf all: move "src/" directory to "src/core/" 2021-02-04 09:45:55 +01:00