Commit graph

15702 commits

Author SHA1 Message Date
Thomas Haller
d16776b5fd
l3cfg: gracefully accept %NULL argument in nm_l3_config_data_lookup_objs()
This way we can safely iterate over a %NULL instance with
nm_l3_config_data_iter_obj_for_each(). This avoids a NULL check,
which in this case seems more annoying than helpful.
2020-09-11 16:18:35 +02:00
Thomas Haller
6358d10688
l3cfg: add nm_l3cfg_get_best_default_route() function
This is the best default route that we commited the last time (if any).
It may not reflect what is currently configured (in NMPlatform) and it
may not reflect the latest changes since nm_l3cfg_add_config().
2020-09-11 16:18:35 +02:00
Thomas Haller
3b8b683f8a
l3cfg: add nm_l3cfg_get_pllink() helper
NML3Cfg already keeps track of the current NMPlatformLink object.
Allow accessing it directly from an NML3Cfg instance, which saves
a cache lookup from NMPlatform.
2020-09-11 16:18:34 +02:00
Thomas Haller
16e59cc37c
l3cfg: support tracking the DHCP lease in NML3ConfigData 2020-09-11 16:18:34 +02:00
Thomas Haller
2fd53eb509
core: add NMDhcpLease typedef and simple accessor functions 2020-09-11 16:18:34 +02:00
Thomas Haller
1001dca698
device: remove unused dhcp4.root_path field 2020-09-11 10:45:36 +02:00
Thomas Haller
58da09439a
libnm,core: deprecate "active_slave" and alias it for "primary"
Setting "active_slave" fails unless the slave is currently present and
IFF_UP. That complicates the code, because we cannot set the property
at any time, but only under the right circumstances.

But really, "active_slave" option is something for debugging. It's not
an option which should be set by NetworkManager. The right option
instead is "primary", which will tell kernel to make the slave active,
when it is ready.

Deprecate the "active_slave" option and make it an alias for "primary".

https://bugzilla.redhat.com/show_bug.cgi?id=1856640
2020-09-10 22:09:58 +02:00
Thomas Haller
22ff4bfd18
device: cleanup code in NMDeviceBond's update_connection() 2020-09-10 22:09:58 +02:00
Thomas Haller
f807b68376
device: inline check_changed_options() in can_reapply_change()
Code doesn't get simpler by having more functions -- if these functions
are only called once.

What actually is a problem is repeated, redundant code. Like the list of
bond options that can be reapplied. But the function didn't help to
avoid repeating the list.
2020-09-10 22:09:57 +02:00
Thomas Haller
5402943420
device: unify setting of bond options
Add a macro for the list of bond options we are going to set. By seeing
them side-by-side, it is hopefully simpler to see that all options are
specified correctly.

We see that:

- the *_SUBSET defines don't include the options that we are explicitly
  setting, that is "mode", "active_slave" and "arp_ip_target".

- OPTIONS_REAPPLY_SUBSET contains 4 options less than OPTIONS_APPLY_SUBSET:
  "ad_select", "ad_user_port_key", "lacp_rate" and "tlb_dynamic_lb".
  These are the options that are marked as BOND_OPTFLAG_IFDOWN in
  kernel.
2020-09-10 22:09:57 +02:00
Thomas Haller
0ea73cdcec
device: remove duplicate option "primary" from list to reapply 2020-09-10 22:09:57 +02:00
Thomas Haller
2eea22ae95
device: allow "active_slave" and "arp_ip_target" bond option for reapply
I guess the idea was to only accept options that can be changed without
taking the interface !IFF_UP. "active_slave" is wrongly omitted from
that list.

Also, "active_slave" option doesn't really make sense for NetworkManager
to configure. Instead "primary" should be used. In the future, we should
re-map the properties and deprecate "active_slave" for "primary" ([1]).

Fixes: 746dc119a6 ('bond: let 'reapply()' reapply all supported options')

[1] https://bugzilla.redhat.com/show_bug.cgi?id=1856640#c19

https://bugzilla.redhat.com/show_bug.cgi?id=1876577
2020-09-10 22:09:57 +02:00
Beniamino Galvani
a017936223 device: fix wrongly considering ipv6.may-fail for ipv4
Fixes: 5e71f01605 ('device: merge stage3 and stage4 ip-config function for IPv4 and IPv6')
2020-09-09 11:02:57 +02:00
Beniamino Galvani
ec12912908 device: enforce the absence of a master during activation
If the connection doesn't specify a master, ensure that the device is
released from any master in platform.

https://bugzilla.redhat.com/show_bug.cgi?id=1869079
https://gitlab.freedesktop.org/NetworkManager/NetworkManager/-/merge_requests/616
2020-09-07 16:29:37 +02:00
Thomas Haller
4038a8ff99
core: accept void pointer in nm_dbus_object_export() and related
NMDBusObject is an abstract type which provides the glue code for exposing
a GObject on D-Bus. We almost never use that type directly, so as it was
before, we always had to use a C cast to convince the compiler that this
is right.

Being always required to cast is not very useful, nor more typesafe.
Just use a void pointer instead.
2020-09-07 16:11:52 +02:00
Thomas Haller
47e2ff0a71
l3cfg: add nm_l3cfg_commit_type*() API for tracking the level for committing changes
NML3Cfg manages one ifindex. In the future, we may want that multiple
NMDevice and/or NMVpnConnection instances independently contribute their
NML3ConfigData to the NML3Cfg instance.

That means, at any time somebody may want to call nm_l3cfg_platform_commit()
to apply the changes. Even ACD internally may do that, when configuration
changes (e.g. an IP address passes ACD check). We thus need to know
whether we are assuming, updating or reapplying the settings.

Add API so users can register their "commit" preference.
2020-09-07 16:11:51 +02:00
Thomas Haller
4c07d34505
l3cfg: add nm_l3_config_data_has_routes_with_type_local() helper 2020-09-07 16:11:51 +02:00
Thomas Haller
c328c10227
l3cfg: more integration of NMDevice with l3cfg
Add more code that will be used later for glueing NMDevice with NML3Cfg
and NML3ConfigData. The code is not yet really used.
2020-09-07 16:11:50 +02:00
Thomas Haller
bd054bf6fd
l3cfg: remove changed flag from nm_l3cfg_add_config()/nm_l3cfg_remove_config() 2020-09-07 16:11:50 +02:00
Thomas Haller
41b9d44f9b
l3cfg: drop unused NM_L3_CONFIG_MERGE_FLAGS_EXTERNAL
The current approach also tracks external configuration in an NMIP[46]Config, and
we need to special handle those. In the future, we only want to track what we actually
want to configure. So this flag won't be used with NML3Cfg/NML3ConfigData.
2020-09-07 16:11:50 +02:00
Thomas Haller
38b2239146
l3cfg: add more l3cfg API that will be used next 2020-09-07 16:11:50 +02:00
Thomas Haller
e89a095673
l3cfg: add nm_l3_config_data_get_blacklisted_ip4_routes() util
We will need to prune routes that kernel adds (and we don't want).
2020-09-07 16:11:49 +02:00
Thomas Haller
0ab341b9e6
l3cfg: add nm_l3_config_data_get_domains() accessor 2020-09-07 16:11:49 +02:00
Thomas Haller
137d02a7e6
platform: add nm_platform_ip_address_get_peer_address() helper 2020-09-07 16:11:49 +02:00
Thomas Haller
e4f04267bb
l3cfg: implement IPv4 DAD/ACD (address collision detection) in NML3Cfg
Currently, NMDevice does ACD. It intercepts certain NMIP4Config
instances, and tries to perform ACD on the addresses. I think this
functionality should be handled by NML3Cfg instead.

For one, NML3Cfg sees all configurations, and can perform ACD for all
(relevant) addresses. Also, it moves logic away from NMDevice and makes
the functionality available without an NMDevice. As such, it also will
allow that independent "controllers" contribute NML3ConfigData instances
and ACD will performed for all of them (as requested).

This will be our implementation for IPv4 ACD (https://tools.ietf.org/html/rfc5227)
based on nettools' n-acd library.

The code is not actually tested yes, because NMDevice did not yet switch
over to use NML3Cfg. Once that happens, surely issues with this patch
will be found that will need fixing.
2020-09-03 11:52:39 +02:00
Thomas Haller
f81360bbbf
platform: add nm_platform_ip4_address_addr_to_hash() helper
This will only have one particular use, from NNL3Cfg. However, it seems
general enough to place it in "nm-platform.h".
2020-09-03 11:39:39 +02:00
Thomas Haller
bff23d15d4
initrd/tests: fix memleak in test_dhcp_vendor_class_id()
Having leaks in the tests, breaks running the test under valgrind. There
must be no leaks.

Fixes: c056cb9306 ('initrd: parse 'rd.net.dhcp.vendor-class' kernel cmdline arg')
2020-09-03 11:36:39 +02:00
Thomas Haller
c7a724fd53
all: replace cleanup macro "gs_free_slist" by "nm_auto_free_slist" 2020-09-02 17:46:43 +02:00
Thomas Haller
426a4c9d50
all: replace cleanup macro "gs_unref_keyfile" by "nm_auto_unref_keyfile" 2020-09-02 17:46:43 +02:00
Thomas Haller
b1e7fb9757
core: log message about secret-key version and filename 2020-09-02 15:12:53 +02:00
Thomas Haller
4a084a2bcb
shared: rename "gs_local_option_context" to "nm_auto_free_option_context"
The "gs_*" macros originate from the (no longer existing) libgsystem library.
We still have them, because so far we didn't go through the effort of
renaming the API.

Aside that oddity, our cleanup API is called "nm_auto*". There is no need
to add new API with the old name.
2020-09-02 10:36:58 +02:00
Antonio Cardace
d5c05d07c7
initrd: fix memory leak
Signed-off-by: Antonio Cardace <acardace@redhat.com>
Fixes: 9f9609555d ('initrd: add configuration generator')
2020-09-01 19:05:10 +02:00
Antonio Cardace
c056cb9306
initrd: parse 'rd.net.dhcp.vendor-class' kernel cmdline arg
This arguments makes NM set the ipv4.dhcp-vendor-class-identifier
property for all connections.

https://bugzilla.redhat.com/show_bug.cgi?id=1872299

Signed-off-by: Antonio Cardace <acardace@redhat.com>
2020-09-01 11:14:46 +02:00
Antonio Cardace
5cca669ff3
core: add 'dhcp-vendor-class-identifier' validation function
So that it can be reused.

Signed-off-by: Antonio Cardace <acardace@redhat.com>
2020-09-01 09:34:29 +02:00
Beniamino Galvani
e404585e60 device: fix autoactivating virtual devices after a failure
When a virtual device fails, its state goes to FAIL and then
DISCONNECTED. In DISCONNECTED we call schedule_activate_check() to
schedule an auto-activation if needed. We also schudule the deletion
of the link through delete_on_deactivate_check_and_schedule(). The
auto-activation attempt fails because the link deletion unmanages the
device; as a result, the device doesn't try to auto-activate again.

To fix this:

 - don't allow the device to auto-activate if the device deletion is
   pending;

 - check again if the device can be auto-activated after its deletion.

https://bugzilla.redhat.com/show_bug.cgi?id=1818697
https://gitlab.freedesktop.org/NetworkManager/NetworkManager/-/merge_requests/613
2020-08-31 11:41:23 +02:00
Thomas Haller
a75dfc73e2
dhcp: workaround "maybe-uninitialized" in dhcp_event_cb()
With LTO we get a compiler warning:

    src/dhcp/nm-dhcp-systemd.c: In function dhcp_event_cb:
    src/dhcp/nm-dhcp-systemd.c:554: error: lease may be used uninitialized in this function [-Werror=maybe-uninitialized]
      554 |   r = sd_dhcp_lease_get_server_identifier (lease, &addr);
          |
    src/dhcp/nm-dhcp-systemd.c:528: note: lease was declared here
      528 |  sd_dhcp_lease *lease;
          |

Fixes: 7f217d0345 ('core: honor the ipv4.dhcp-reject-servers property')
2020-08-28 14:28:56 +02:00
Thomas Haller
918ebd600a
device: fix casting pointer to enum for sriov_reset_on_deactivate_cb()
Avoids a compiler warning:

    ../src/devices/nm-device.c:16079:26: error: cast to smaller integer type 'NMDeviceStateReason' from 'gpointer' (aka 'void *') [-Werror,-Wvoid-pointer-to-enum-cast]
            deactivate_ready (self, (NMDeviceStateReason) reason);
                                    ^~~~~~~~~~~~~~~~~~~~~~~~~~~~

Fixes: 121c58f0c4 ('core: set number of SR-IOV VFs asynchronously')
2020-08-28 12:39:56 +02:00
Thomas Haller
818d146d88
core/trivial: replace "XXX" markers with "TODO"
"XXX" is used for tagging parts of code that still need work before
merging a patch. If you want to highlight/mark a comment which is merged
use either "TODO" or "FIXME".

Of course, even "TODO" and "FIXME" should be avoided in favor of just
doing/fixing it. Such things tend to never be done/fixed.
2020-08-27 17:10:55 +02:00
Beniamino Galvani
b609088ae6 dhcp: nettools: change event handler signature 2020-08-26 17:28:45 +02:00
Beniamino Galvani
7f217d0345 core: honor the ipv4.dhcp-reject-servers property 2020-08-26 17:28:45 +02:00
Beniamino Galvani
757fa4711f all: add ipv4.dhcp-reject-servers property
Add a new dhcp-reject-servers property to the ipv4 setting, that
allows specifying a list of server-ids from which offers should be
rejected.
2020-08-26 17:28:45 +02:00
Antonio Cardace
5da0939a3f
dhcp: implement dhcp-vendor-class-identifier option for systemd's DHCP
client

https://bugzilla.redhat.com/show_bug.cgi?id=1871042
Signed-off-by: Antonio Cardace <acardace@redhat.com>
2020-08-26 09:44:11 +02:00
Antonio Cardace
f8a7290153
dhcp: implement dhcp-vendor-class-identifier option for internal DHCP client
https://bugzilla.redhat.com/show_bug.cgi?id=1871042
Signed-off-by: Antonio Cardace <acardace@redhat.com>
2020-08-26 09:44:10 +02:00
Antonio Cardace
f71f40bc20
core: add support for dhcpv4 vendor class identifier option
https://bugzilla.redhat.com/show_bug.cgi?id=1871042
Signed-off-by: Antonio Cardace <acardace@redhat.com>
2020-08-26 09:44:09 +02:00
Antonio Cardace
e9ed5f02ba
ifcfg-rh: add support for the DHCP_VENDOR_CLASS_IDENTIFIER option
https://bugzilla.redhat.com/show_bug.cgi?id=1871042
Signed-off-by: Antonio Cardace <acardace@redhat.com>
2020-08-26 09:44:09 +02:00
Thomas Haller
c1f9a0fff1
dns: add new "rc-manager=auto" mode
Add a new `main.rc-manager=auto` setting, that favours to use
systemd-resolved (and not touch "/etc/resolv.conf" but configure
it via D-Bus), or falls back to `resolvconf`/`netconfig` binaries
if they are installed and enabled at compile time.
As final fallback use "symlink", like before.

Note that on Fedora there is no "openresolv" package ([1]). Instead, "systemd"
package provides "/usr/sbin/resolvconf" as a wrapper for systemd-resolved's
"resolvectl". On such a system the fallback to resolvconf is always
wrong, because NetworkManager should either talk to systemd-resolved
directly or not but never call "/usr/sbin/resolvconf". So, the special handling
for resolvconf and netconfig is only done if NetworkManager was build with these
applications explicitly enabled.

Note that SUSE builds NetworkManager with

    --with-netconfig=yes
    --with-config-dns-rc-manager-default=netconfig

and the new option won't be used there either. But of course, netconfig
already does all the right things on SUSE.

[1] https://bugzilla.redhat.com/show_bug.cgi?id=668153

Suggested-by: Jason A. Donenfeld <Jason@zx2c4.com>
2020-08-24 21:13:21 +02:00
Thomas Haller
c752c52b76
dns: add fixme comment to not block while writing to resolvconf/netconfig
Arguably, a fixme comment isn't useful. It would be better to fix it.
On the other hand, nowadays these modes are not very popular and usually
not used. If somebody cares, please provide a patch.
2020-08-24 21:10:29 +02:00
Beniamino Galvani
01a1eaf02f dhcp: nettools: parse some missing option
Add support for the following options to the nettool client:

- Network Information Service Domain (40)
- Network Information Servers (41)
- NetBIOS over TCP/IP Name Server (44)

https://gitlab.freedesktop.org/NetworkManager/NetworkManager/-/merge_requests/592
2020-08-24 16:51:53 +02:00
Beniamino Galvani
5fbc967fb8 dhcp: nettools: use generic function to parse address lists 2020-08-24 16:51:53 +02:00
Thomas Haller
80c0de7217
platform: workaround for old kernels that don't support IFLA_BR_VLAN_STATS_ENABLED
The kernel of Ubuntu 16.04 doesn't support IFLA_BR_VLAN_STATS_ENABLED.
If we want to run on such old kernels (which we probably do), we need to
detect that, and act accordingly.
2020-08-21 13:59:50 +02:00